Swift 2.2 有哪些變化?

lplo 8年前發布 | 13K 次閱讀 Swift Apple Swift開發

這次蘋果公開宣布的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 已經包含了。
  • 開發者文檔更新 點擊這里 查看詳細內容。

來自: https://realm.io/cn/news/swift2-2/  

 本文由用戶 lplo 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!