Swift4 的變化列舉
2017 Swift語言已經更新到了第4版,應該說Swift發展到現在這樣才算相對穩定,不再是每一次更新對於開發者來說都像是半個新的語言一樣,老的工程都要重新一點點的修改,雖然不至於像之前的變化那麼大,但是也還是有一些改變的,下面就介紹可能會很常見的幾點區別,以後也會經常更新
1.Private關鍵字
Swift3中的private屬性或者方法都不能在extension擴充套件中被訪問,就像下圖這樣是會報錯的
如果我們用fileprivate來修飾屬性或者方法的話,那麼在同一個檔案裡面寫的extension就能方法了,可是這種做法也有它的缺點,就是同一個檔案裡可以寫不同的Class或者不同的Class的extension,他們也都能訪問我們的TestClass下的fileprivate標記的屬性方法。
現在到了Swift4之後就有了變化,上面這種在某個Class類的extension裡就可以訪問這個Class裡面private標記的屬性和方法了。但是注意這個extension必須跟Class寫在同一個檔案內,不然也是不能訪問的!
2.可以直接對String進行index相關方法
以前對String單個字元做操作或者取座標等等,都需要訪問String的characters屬性,現在在Swift4裡就可以直接對String呼叫方法即可,區別見下圖
3.開區間
比如以前我們表示一個區間會這樣寫1...5或者1..<5,可以看到它都需要明確寫出一個下限和一個上限。現在Swift4允許你設定一個區間只有下限或者只有上限,比如...5或5...
現在你可以像下圖這樣,如果我要對一個陣列從下標為2的開始遍歷,直接使用2...即可
4.類和協議的組合
現在我們能將類和協議組合起來變成一個新的型別,比如我們可以限定我們的方法接受的引數必須是"A類"的物件且同時遵守"B協議",類和協議通過符號&組合起來
5.高階方法map、filter的返回值型別
Dicitonary的filter高階方法在以前返回的是一個新的陣列,而現在返回的就是一個新的字典,區別看下圖
同時Dicitonary多了一個新的map方法,叫做mapValue,可以對字典裡的每一個value進行遍歷處理返回一個新的value,返回的也是一個新的Dicitonary
PS:另外Set的filter方法返回的也將是一個新的Set而不是Array了
6.Dictionary的新方法grouping
swift4的Dicitonary多了一個叫grouping的新方法,將一個序列裡的元素遍歷一遍,然後每個元素返回一個所對應的key,然後將相同的key的元素放進一個陣列作為這個key對應的value,最後返回一個分好組的Dictionary物件。
比如下面的列子,可以對一組人名進行分組,取出每個元素第一個字作為key
7.swap方法交換陣列內元素位置
以前交換陣列中元素是使用swap方法,傳入兩個要交換位置的inout修飾的元素
現在swift4的Array自己有了swapAt方法,直接傳入兩個下標位置即可
相關文章
- 列舉和列舉的取值範圍
- POJ 1753 Flip Game(列舉變元的高斯消元)GAM
- 用列舉簡化登入操作
- 2、全域性變數和列舉常量 (轉)變數
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- 深度分析 Java 的列舉型別:列舉的執行緒安全性及序列化問題Java型別執行緒
- Java列舉-通過值查詢對應的列舉Java
- Java enum列舉類詳解 列舉的常見用法Java
- iOS 列舉的巧用iOS
- delphi 裡的 列舉
- java中的列舉Java
- 列舉子集的方法
- Java列舉Java
- Swift,列舉Swift
- swift4 kvcSwift
- C/C++列舉enum分別列印輸出列舉子和列舉值的方法C++
- c#列舉與陣列初始化及使用小記C#陣列
- Swift列舉的全用法Swift
- Java 列舉 switch的用法Java
- 列舉GCRoots的實現GC
- C# 中的“智慧列舉”:如何在列舉中增加行為C#
- c++11 實現列舉值到列舉名的轉換C++
- 子集列舉最佳化與高維字首和
- C# 列舉與位列舉概述C#
- 列舉工具類
- TypeScript 列舉enumTypeScript
- Java 列舉(enum)Java
- Swift-列舉Swift
- 自定義列舉
- java列舉類Java
- TypeScript 列舉指南TypeScript
- Java列舉使用Java
- C#:列舉C#
- 列舉程式 (轉)
- 列舉比較
- 列舉型別型別
- 如何監聽陣列變化?陣列
- java中的列舉型別Java型別