Swift 4正式發布,新功能概覽

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
來自: http://www.infoq.com/cn/news/2017/09/swift-4-official-release