\\\\
xcode 9.3中的swift 4.1帶來了一些語言上的提公升,包括equatable
和hashable
協議的自動實現和條件一致性等。
\\條件一致性
\\ 條件一致性即,泛型型別只有在其型別引數滿足特定要求的時候才會遵循某個協議。例如,乙個array
只有當它的元素也遵循equatable
協議的時候,才能實現equatable協議。這可以用下列宣告表示。
\\
\extension array: equatable where element: equatable \}\\\
這彌補了swift泛型上的缺陷,使得泛型介面卡型別(例如,反映組合型別能力的泛型型別)完全成為可能。例如,在swift 3中存在4種不同的處理「懶」專案的泛型型別:lazysequence
、lazycollection
、lazybidirectionalcollection
和lazyrandomaccesscollection
。其中每一種型別都重新實現或者繼承了和組合型別相同的api。使用條件一致性,某一種型別的sequence可以宣告遵循懶協議,而無需定義任何中間泛型型別。
\\synthesized==
andhashvalue
\\ swift 4.1編譯器能夠為那些宣告遵循equatable
和hahable
協議的structs和enums,生成==
和hashvalue
方法的實現。以前,開發者必須自己實現那些方法,而那是一件非常繁瑣的任務:在通常情況下,==
方法的實現必須比較structs或unions的每乙個相應成員;而hashvalue
方法必須設法保證返回乙個唯一的字串。在swift 4.1,開發者只需宣告遵循那些協議,相關的方法就會自動生成,提供所有儲存的分別符合equatable
或hashable
的屬性或列舉值。
\\ swift 4.1中的其它顯著改變如下:
\\
\let s = \"hashable\"\let p = \\string.[s.startindex]\s[keypath: p] // \"h\"\\\
完全實現智慧型keypaths。keypath現在支援下標、可選的鏈結和可選的強制換行。 \\
swift structs不再允許在乙個不同的模組中定義乙個初始化器來直接初始化struct的字段。在訪問struct欄位前,struct必須已經呼叫self.init
進行了初始化。\\\
想要全面了解所有變更,你可以訪問官方的變更日誌。
\\檢視英文原文:swift 4.1 brings conditional conformance and more
\\ 感謝羅遠航對本文的審校。
\
Swift 4 1帶來條件一致性等語言上的提公升
xcode 9.3中的swift 4.1帶來了一些語言上的提公升,包括equatable和hashable協議的自動實現和條件一致性等。條件一致性 條件一致性即,泛型型別只有在其型別引數滿足特定要求的時候才會遵循某個協議。例如,乙個array只有當它的元素也遵循equatable協議的時候,才能實現...
Swift 4 1帶來條件一致性等語言上的提公升
xcode 9.3中的swift 4.1帶來了一些語言上的提公升,包括equatable和hashable協議的自動實現和條件一致性等。條件一致性 條件一致性即,泛型型別只有在其型別引數滿足特定要求的時候才會遵循某個協議。例如,乙個array只有當它的元素也遵循equatable協議的時候,才能實現...
Swift 4 1帶來條件一致性等語言上的提公升
xcode 9.3中的swift 4.1帶來了一些語言上的提公升,包括equatable和hashable協議的自動實現和條件一致性等。條件一致性 條件一致性即,泛型型別只有在其型別引數滿足特定要求的時候才會遵循某個協議。例如,乙個array只有當它的元素也遵循equatable協議的時候,才能實現...