Apple宣布正式釋出Swift 4.1,這次添加了新的語言功能、建置選項以及一些Swift套件管理器的強化,現在Xcode 9.3 beta也已經支援Swift 4.1,開發者可以先嚐鮮試試新功能。

語言本身的功能,其中重要的更新便是泛型的擴充,讓Swift的泛型系統有更完整的表達方法。Swift 4.1在標準函式庫中加入條件一致性(Conditional Conformance),其所表達的概念為,泛型類型只有在其參數類型符合特定要求時才符合特定協定(Protocol)。

在Swift 4.0中,雖然Array可以使用等號比較運算子==(Equatable),Optional卻不行,而等號比較運算子也不支援兩個Optional操作數,因此let a = ["1","2","x"].map(Int.init) a == [1,2,nil]這樣的寫法,會收到編譯器的錯誤警告。

但是現在Swift 4.1,已經可以修正這樣的問題,開發者可以讓原本無法使用等號比較運算子的型態,透過實作後也能使用。以Optional為例,開發者可以先為Optional實做等號比較運算子,撰寫extension Optional: Equatable where Wrapped: Equatable {}程式碼,便能讓Optional像Array一樣使用等號比較運算子。

在Swift 4.1中受惠於條件一致性,Optional、Array和Dictionary只要值與元素符合,就能使用等號比較運算子和哈希表(Hashable)。而這個方法也適用於可編碼屬性(Codable),現在嘗試編碼一個無法編碼的型態,會得到錯誤訊息而不會困在Runtime階段的執行陷阱。

編譯器在之前版本支援速度最佳化後,Swift 4.1還支援程式碼容量最佳化。新的最佳化選項可以選擇對全模組或是單一檔案編譯最佳化,Apple表示,全模組最佳化的效果較佳,檔案大小能減少5%到30%。 另外,套件管理器現在可以正確的解決,來自SSH或是HTTP不同協定套件圖(Package Graphs)的相依性問題,並能更快的處理共享相依性。


Advertisement

更多 iThome相關內容