Swift 4.0 更新合集、新功能匯總

來源:互聯網
上載者:User

本文由陳雲峰翻譯,轉載請註明。

注意:本教程將使用Swift 4版本捆綁在Xcode 9 beta 1中。

Swift 4是蘋果計劃於2017年秋季推出的最新版本,其主要重點是提供與Swift 3代碼的源相容性,並努力實現ABI穩定性。

本文重點介紹對Swift的更改將對您的代碼產生最大的影響。 而且,讓我們開始吧。 入門

Swift 4包含在Xcode 9中。您可以從Apple的開發人員門戶下載最新版本的Xcode 9(您必須擁有一個活躍的開發人員帳戶)。 每個Xcode測試版將在發布時捆綁最新的Swift 4快照。

在閱讀時,您會注意到[SE-xxxx]格式的連結。 這些連結將帶您到相關的Swift Evolution提案。 如果您想瞭解有關任何主題的更多資訊,請務必查看。

我建議您在操場上嘗試每個Swift 4功能或更新。 這將有助於鞏固您的頭腦中的知識,並使您有能力深入瞭解每個主題。 試圖擴大/打破他們的例子來玩弄這些例子。 玩得開心。

注意:本文將針對每個Xcode測試版進行更新。 如果您使用不同的Swift快照,這裡的代碼不能保證工作。 遷移到Swift 4

從Swift 3遷移到4將比從2.2到3更麻煩。一般來說, 大多數變化是相加的,不應該需要大量的個人感覺。 因此,Swift遷移工具將為您處理大部分更改。

Xcode 9同時支援Swift 4以及Swift 3.2中的Swift 3中間版本。 您的項目中的每個目標可以是Swift 3.2或Swift 4,如果需要,您可以逐個遷移。 然而,轉換為Swift 3.2並不是完全免費的 – 您可能需要更新代碼部分才能與新SDK相容,並且由於Swift尚未ABI穩定,因此您將需要使用Xcode 9重新編譯依賴項。

當您準備遷移到Swift 4時,Xcode再次提供了一個遷移工具來協助您。 在Xcode中,您可以導航到編輯/轉換/到當前Swift文法…以啟動轉換工具。

選擇要轉換的目標後,Xcode將提示您對Objective-C推理的偏好。 選擇推薦的選項通過限制引用來減少二進位大小(有關此主題的更多資訊,請查看下面的限制@objc推斷 )

為了更好地瞭解您的代碼中期望的更改,我們將首先介紹Swift 4中的API更改。 API更改

在跳轉到Swift 4中介紹的補充之前,我們先來看看現有API所做的更改/改進。 字串

String在Swift 4中獲得了很多很好的愛。這個提案包含很多變化,所以讓我們分解最大的。 [SE-0163] :

如果你感覺懷舊,字串再次收藏,就像他們是Swift 2.0之前一樣。 此更改消除了對String上的String數組的需求。 您現在可以直接在String對象上進行迭代:

let galaxy = "Milky Way "for char in galaxy {  print(char)}

您不僅可以通過String邏輯迭代,還可以從Sequence和Collection擷取所有的響鈴和口哨:

galaxy.count       // 11galaxy.isEmpty     // falsegalaxy.dropFirst() // "ilky Way "String(galaxy.reversed()) // " yaW ykliM"// Filter out any none ASCII charactersgalaxy.filter { char in  let isASCII = char.unicodeScalars.reduce(true, { $0 && $1.isASCII })  return isASCII} // "Milky Way "

上面的ASCII樣本顯示了對Character 。 您現在可以直接從Character訪問Character 。 以前,您需要執行個體化一個新的String [SE-0178] 。

另外還有一個是StringProtocol 。 它聲明了以前在String上聲明的大部分功能。 這種變化的原因是改善切片如何工作。 Swift 4添加了Substring類型,用於引用String上的子序列。

String和Substring實現了StringProtocol使它們具有幾乎相同的功能:

// Grab a subsequence of Stringlet endIndex = galaxy.index(galaxy.startIndex, offsetBy: 3)var milkSubstring = galaxy[galaxy.startIndex...endIndex]   // "Milk"type(of: milkSubstring)   // Substring.Type// Concatenate a String onto a SubstringmilkSubstring += ""     // "Milk"// Create a String from a Substringlet milkString = String(milkSubstring) 
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.