Swift4 的變化列舉

weixin_33866037發表於2017-07-10

2017 Swift語言已經更新到了第4版,應該說Swift發展到現在這樣才算相對穩定,不再是每一次更新對於開發者來說都像是半個新的語言一樣,老的工程都要重新一點點的修改,雖然不至於像之前的變化那麼大,但是也還是有一些改變的,下面就介紹可能會很常見的幾點區別,以後也會經常更新

1.Private關鍵字

Swift3中的private屬性或者方法都不能在extension擴充套件中被訪問,就像下圖這樣是會報錯的

1891636-6fdf2cb9ec845bf0.png

如果我們用fileprivate來修飾屬性或者方法的話,那麼在同一個檔案裡面寫的extension就能方法了,可是這種做法也有它的缺點,就是同一個檔案裡可以寫不同的Class或者不同的Class的extension,他們也都能訪問我們的TestClass下的fileprivate標記的屬性方法。

現在到了Swift4之後就有了變化,上面這種在某個Class類的extension裡就可以訪問這個Class裡面private標記的屬性和方法了。但是注意這個extension必須跟Class寫在同一個檔案內,不然也是不能訪問的!


2.可以直接對String進行index相關方法

以前對String單個字元做操作或者取座標等等,都需要訪問String的characters屬性,現在在Swift4裡就可以直接對String呼叫方法即可,區別見下圖

1891636-44a254b14279c4bc.png


1891636-d56201b56a4fd916.png


3.開區間

比如以前我們表示一個區間會這樣寫1...5或者1..<5,可以看到它都需要明確寫出一個下限和一個上限。現在Swift4允許你設定一個區間只有下限或者只有上限,比如...5或5...

現在你可以像下圖這樣,如果我要對一個陣列從下標為2的開始遍歷,直接使用2...即可

1891636-29898b5a206bccd2.png
Output: 3 4


4.類和協議的組合

現在我們能將類和協議組合起來變成一個新的型別,比如我們可以限定我們的方法接受的引數必須是"A類"的物件且同時遵守"B協議",類和協議通過符號&組合起來

1891636-e9ac71c2bba23571.png
有一個叫Program的類和一個Testable的協議
1891636-32cfcaec5096d371.png
此方法的引數必須是Program類且同時遵守Testable協議


5.高階方法map、filter的返回值型別

Dicitonary的filter高階方法在以前返回的是一個新的陣列,而現在返回的就是一個新的字典,區別看下圖

1891636-cbcf8a5bf82a2807.png
swift3
1891636-b3ef6a8da8c12e7b.png
swift4


同時Dicitonary多了一個新的map方法,叫做mapValue,可以對字典裡的每一個value進行遍歷處理返回一個新的value,返回的也是一個新的Dicitonary

1891636-7ff60681cbd35be3.png
新方法mapValue舉例


1891636-1dbc0824dfeb86a5.png
mapValue的輸出結果


PS:另外Set的filter方法返回的也將是一個新的Set而不是Array了


6.Dictionary的新方法grouping

swift4的Dicitonary多了一個叫grouping的新方法,將一個序列裡的元素遍歷一遍,然後每個元素返回一個所對應的key,然後將相同的key的元素放進一個陣列作為這個key對應的value,最後返回一個分好組的Dictionary物件。

比如下面的列子,可以對一組人名進行分組,取出每個元素第一個字作為key

1891636-6907ae629463d54b.png
grouping方法
1891636-b52b266d284cf175.png
print列印結果


7.swap方法交換陣列內元素位置

以前交換陣列中元素是使用swap方法,傳入兩個要交換位置的inout修飾的元素

現在swift4的Array自己有了swapAt方法,直接傳入兩個下標位置即可

1891636-8ee1f9283ace452d.png
Swift3
1891636-6f3ed7b4a564222a.png
Swift4

相關文章