Swift 2.2 有哪些變化?

netsmell發表於2016-04-09

  這次蘋果公開宣佈的Swift2.2是隨著Swift開源之後,通過反映了在Github提交的許多bug的首次官方版本。並且蘋果公司一起釋出了 XCode 7.3,讓我們看看有哪些變化吧。如大家所熟知的 Swift 3.0 預計會在今年年末(2016年10月份)釋出,Swift 2.2 可以說是一個過渡性版本,主要是bug修復,效能提升,在不影響原先程式碼使用的一些小改進。本文的內容並不是Swift 2.2的所有內容,主要是總結了官方釋出文件中這次更新的主要內容。請參考官方公佈文件

  棄用 ++-- 和 C 風格的 for 迴圈語句

  SE-0004 相比使用 num++,integer 或者 float 更為推薦使用 num += 1,Index 方式則使用 x = x.successor()。使用 ++ 並不會馬上就會有錯誤提示,但是隨著日後3.0版本的釋出,++ 語法的消失,會出現程式碼錯誤修正提示。Swift 3.0 會有很多修正和改善的語法,現在就行動起來把 ++ 和 -- 去掉也未嘗不可。

  ++ 和 -- 不再使用的原因是雖然所有的開發者非常明確的知道 a++ 和 ++a 的差異,但是非常影響程式碼的可讀性,並且上述語法是在 C 風格的 for 迴圈語句中最為常用,由於 C 風格的 for 迴圈語句在 3.0 版本中會完全消失,所以 ++ 和 -- 的刪除並不會給開發者帶來太多的不便。

  C風格的 for 迴圈語句不建議再使用。

  官方建議使用如下方式的 for 迴圈語句

for i in 1...10 {
    print("\(i) iphone")
}

  使用陣列進行遍歷。

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for number in array {
    print("\(number) green bottles")
}

  C 風格的 for 迴圈語句在 3.0 版本中會完全消失。

  支援更多的關鍵字用作為引數名

  Argument labels(為引數新增標記)是 Swift 的一項語法。如下所示,可以在傳遞帶標記的引數,不用考慮引數的順序,通過引數前的標記提高了程式碼的可讀性。

for i in 1.stride(through: 9, by: 2) {
    print(i)
}

  這段程式碼輸出的結果和下段程式碼所輸出的結果不同。 (stride 函式的 through 和 to 不同),請參考stride 文件

for i in 1.stride(to: 9, by: 2) {
    print(i)
}

  Argument label 可以使用的名字有很多限制條件,但是在2.2版本中大部分關鍵字變的可用。現在只有 var、let 和 inout 不能使用,但是這個限制條件會在 3.0 版本中消失。
更為詳細的內容請參考 SE-0001

  為 Tuple(元祖)增加對比操作符

  在 Swift 2.2 版本以前是無法比較兩個元祖的。在新版本中我們可以用如下的方式比較兩個元祖。

let singer = ("Taylor", "Swift")
let korea = ("Gangnam", "Style")

if singer == korea {
    print("Matching tuples!")
} else {
    print("Non-matching tuples!")
}

  但是支援範圍僅在 Tuple(元祖)裡面的元素不多於6個的情況下。

  更為詳細的內容請參考SE-0015

  改善 associated(關聯) 型別變數宣告方式

  使用 typealias 關鍵字可以宣告2種不同型別的變數。

  • 為一個已經存在的型別取個別名
  • 在協議中作為一個型別的佔位名稱

  上述2種是完全不懂的用法,不應該用一樣的關鍵字,為了宣告 associated 型別的變數應該使用 associatedtype,而不是使用 typealias。更為詳細的內容請參考 SE-0011

  增加 #if swift 語法在編譯期檢測 Swift 版本

  Swift 2.2 在 編譯設定裡支援如下方式的 Swift 版本檢測

#if swift(>=2.2)
print("Running Swift 2.2 or later")
#else
print("Running Swift 2.1 or earlier")
#endif

  更為詳細的內容請參照SE-0020

  其他

  • Swift Package Manager距離釋出還有很長一段時間。
  • 現在在 linux 上並沒有太多的改善. 雖然這回釋出的 Swift Core Libraries 沒有包含,但是 LLDB 和 the REPL 已經包含了。
  • 開發者文件更新 點選這裡 檢視詳細內容。

相關文章