Swift最新的主要版本提供了針對語言本身以及標準庫的大量改動和更新,最重要的變化包括新增的 String
功能、擴展集合、歸檔和序列化等。
Swift 4中, String已全面遵循Collection協議 ,因此可直接叠代並提供了集合與序列類似的全部條件,例如:
for c in myString { print(c) } myString.filter { c in return boolCheck(c) } let l = myString.count let myString2 = myString.dropFirst()
此外String切片現已成為 下標(Substring)類型的實例
,遵循 StringProtocol
,可按照與 String
類型完全一致的方式使用。這一改動有助於改善切片性能,因為 Substring
已經不再需要復制String切片。復制操作可延遲至 Substring
轉換為 String
並被某些API使用的時候進行。
String的其他功能還包括:支持Unicode 9以及 多行Literal 。
Swift 4還改進了用戶創建、使用和管理集合類型的方式,例如 Dictionary和Set 。
首先,用戶現在已經可以通過元祖(Tuple)序列創建字典,並指定如果遇到重復內容後的處理方式,而這一操作可在創建字典或合並兩個字典的過程中進行:
let items = ["ItemA", "ItemB", "ItemC", "ItemA"] let prices = [14.40, 41.63, 3.71, 15.63] let catalog1 = Dictionary(uniqueKeysWithValues: zip(items, prices)) let catalog2 = Dictionary(prices, uniquingKeysWith: { (l, r) in l }) let catalog3 = Dictionary(prices, uniquingKeysWith: { (l, r) in l + r }) let merged = catalog.merge(catalog3) { (l, r) in r }
Dictionary
和 Set
現在可以篩選成為原始類型的另一個對象,而不再篩選為 Array
。此外字典也已經可以支持新的 mapValues
方法:
let catalog4 = catalog.filter { $0.value < 15.0 } let catalog5 = catalog.mapValues { $0 * 1.2 }
關於字典還有一個實用的改進:在訪問其元素時可以指定默認值,這樣便可讓下標運算符返回Non-opt類型:
let price1 : Float = catalog['none', default: 0.0] let price2 : Float? = catalog['none']
Swift 4中所有 Collection
類型均 支持泛型下標(Generic subscript)
。這意味著我們可以定義下列 JSON
結構,不將索引的結果拋給字典:
struct JSON { init(dictionary: [String:Any]) { ... } subscript (key: String) -> T? { ... } } let json = ... let result: String? = json['item']
對於該語言還有一個廣受好評的改進:對歸檔和序列化的支持,以前這需要通過 NSObject
和 NSCoding
處理,無法用於 struct
和 enum
類型。但Swift 4通過 Codable
協議 增加了對所有類型的序列化支持
。Ole Begemann對Swift 4的 編碼和解碼
提供了入門簡介。例如我們可以這樣定義一個 Codable
類型:
struct Card: Codable, Equatable { enum Suit: String, Codable { case clubs, spades, hearts, diamonds } enum Rank: Int, Codable { case two = 2, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace } var suit: Suit var rank: Rank static func ==(lhs: Card, rhs: Card) -> Bool { return lhs.suit == rhs.suit && lhs.rank == rhs.rank } } let hand = [Card(suit: .clubs, rank: .ace), Card(suit: .hearts, rank: .queen)]
最後,Swift 4提供了兩種語言模式,可通過 -swift-version
編譯器選項進行選擇。在Swift 3.2模式中,編譯器可接受大部分使用Swift 3.x編譯器編譯的源代碼。在該模式下,大部分Swift 4語言功能均可用,但針對之前已有API的各種更新均不可用。在Swift 4.0模式中,我們可以使用Swift 4的全部功能,但可能需要改動部分源代碼,這一過程通常可通過Xcode的遷移助理實現。
Swift 4還有很多改進,建議閱讀Swift維護者Ted Kremenek的公告,並通過Ole Begemann在交互式Playground中提供的所有新功能演示來體驗。
Swift 4已包含在 Xcode 9 中,並可手工安裝到 Xcode 8.3 中使用。
閱讀英文原文: Swift 4 is Officially Available: What's New
Tags: String Dictionary let 切片 myString Swift
文章來源: