Swift 2.2 有哪些變化?
這次蘋果公開宣布的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(元祖)增加對比操作符
為 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(關聯) 類型變量聲明方式
改善 associated(關聯) 類型變量聲明方式
使用 typealias 關鍵字可以聲明2種不同類型的變量。
為一個已經存在的類型取個別名
在協議中作為一個類型的占位名稱
上述2種是完全不懂的用法,不應該用一樣的關鍵字,為了聲明 associated 類型的變量應該使用 associatedtype,而不是使用 typealias。更為詳細的內容請參考 SE-0011 。
增加 #if swift 語法在編譯期檢測 Swift 版本
增加 #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 已經包含了。
開發者文檔更新 點擊這里 查看詳細內容。