Swift 3.1 的一些新特性

來源:互聯網
上載者:User

標籤:cer   alt   精度   img   rtp   xcode   版本   常見   丟失   

Swift 3.1 的一些新特性 

 

推薦序

本文來自泊學的投稿,介紹了 Swift 3.1 的新特性,感謝泊學授權發表。以下為文章本文。

本文

Apple 終於發布了Xcode 8.3以及Swift 3.1。如果你沒時間仔細通讀一遍release note,至少,Swift 3.1中的一些新特性還是值得瞭解的,為此,我們特別製作了一個免費的內容系列。當然,Swift 3.1和Swift 3在原始碼層級是相容的,因此,如果你的項目已經更新到了Swift 3,這次更新應該不會給你帶來太多麻煩。但是,Xcode 8.3去掉了對Swift 2.3的支援,所以,如果你還停留在更早版本的Swift上,就還是謹慎更新的為好。

接下來,我們就簡單介紹下這個系列裡的內容。

SE-0080 數實值型別的failable initialize

這是SE-0080帶來的改進。例如,之前,當我們把一個Double強制轉換成Int的時候,Swift會自動取消小數點後的部分。當我們需要在不同的數字類型之間執行“無損”的精度轉換時,這個功能就非常有用,當轉型會導致精度丟失的時候,init(exactly:)方法會給我們返回nil。我們通過一個最常見的情境:解析伺服器返回的JSON,向大家展示了這個功能的具體用法。

SE-0045 Sequence中新添加的兩個篩選元素的方法

prefix(while:)drop(while:)是Swift 3.1中新加入到Sequence類型的兩個API方法,通過它們,可以協助我們更有效編寫在Sequence中篩選元素的方法。特別是,如果我們要在一個無限序列中篩選元素,它們就顯得更方便了。

SE-0103 臨時轉換成escaping的closure

就像SE-0103中描述的一樣,在Swift 3裡,函數的closure型別參數預設從escaping變成了non-escaping。這很好理解,因為大多數用於函數式編程的closure參數的確都以non-escaping的方式工作。

但這份提議也提到了一個問題,就是有時候,我們需要把non-escaping屬性的closure,傳遞給需要escaping屬性closure的函數。什麼時候需要這種情境呢?也許你在其他地方看到的解釋是:這是一個不太常見的用法。

SE-0141 通過available約束Swift版本

雖 然之前我們可以通過#if這樣的形式達到版本控制的目的,但如果我們用這樣的方式編寫程式庫,就會有一個不太方便的地方。編譯器要為它支援的每一個 Swift版本都獨立編譯一遍。於是,如果在一個Swift ABI累積性更新之間相容了多個Swift版本,那麼攜帶這段時間編寫的程式庫就是一個比較笨重的事情。一個更好的辦法,當然應該是只編譯一次,然後在生 成的程式庫包含每個API可以支援的Swift版本。

為此Swift 3.1中,對@available進行了擴充,我們不僅可以用它來約束作業系統,還可以指定Swift的版本。

SR-1009 使用具象類型約束泛型參數

在Swift 3.0中,如果我們要為某個特定類型的Optional添加extension,不是一件太容易的事情。我們得通過用protocol約束一個類型相同的computed property來類比某個具象類型的約束。但在Swift 3.1裡,這個缺陷被彌補了,我們不僅可以對泛型參數使用protocol進行約束,還可以使用具象類型作為類型約束,這有點兒像C++泛型中的模板偏特化技術。

SR-1446 關於內嵌類型的兩種改進

這一部分,我們來聊聊和內嵌類型有關的話題。在Swift 3.1裡,內嵌類型有了兩方面的改進:

  • 普通類型的內嵌類型可以直接使用其外圍類型的泛型參數,此時它仍舊是一個普通類型;

  • 泛型型別的內嵌類型可以擁有和其外圍類型完全不同的泛型參數;

點擊“閱讀原文”,可以查看泊學中相應的免費視頻教程。如果你想訂閱泊學的服務,使用這個連結可以多獲得 30% 會員時間長度: http://t.cn/R6GtgJS 。

Swift 3.1 的一些新特性

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.