iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 10
0

https://ithelp.ithome.com.tw/upload/images/20181025/20110801W2rkYmnw1n.png

閉包是功能獨立的區塊,可以在程式之間被傳遞及使用。像是之前提到的巢狀函式 ( Nested Function ),就是一種閉包。

閉包有三種表示方式:

・函式就是一種有名字的閉包
・巢狀函式是一種有名字且被包在其他函式中的閉包
・閉包表達式是使用簡潔的語法來描述一種沒有名字的閉包,可以在程式之間傳遞及使用。

Sorted

Swift 提供了一種叫做 sorted的方法,根據我們提供的排序閉包,將已知類型數組的值進行排序,一旦排序完成,sorted 會回傳與原數組類型大小完全相同的數組,這個新數組是已經排序好的。我們可以用 sorted() 去使用 sorted 的功能,再沒有特別設定之下,sorted的功能就是將 Array 中的數值從小到大排列,字串則是照字母順序:

https://ithelp.ithome.com.tw/upload/images/20181025/2011080195W8ze98sS.png

如果我們想要讓 Array 由大到小排序 ( 字串則反之 ),可以透過定義 function,並使用 sorted(by: ):

https://ithelp.ithome.com.tw/upload/images/20181025/20110801ETNEqS4frz.png

閉包表達式:
閉包表達式 ( Closure Expression ) 是一種用簡潔語法建立匿名函式的方式。同時提共了優化語法,可以使程式碼變得更好讀。

{(參數)-> 返回值型別 in 內部程式 }

從上面的程式看到,與一般函式相同的是閉包同樣有一個大括號將程式包起來,不過省略了名稱,包著參數的小括號放到大括號裡面,接著返回型別,再接一個 in 執行內部程式

https://ithelp.ithome.com.tw/upload/images/20181025/20110801PSgHCSMPI3.png

在這邊我們不是建立一個 function,而是將這些參數及回傳值等等包在一個大括號中,最後再用 in 導入內部程式

從上下文推斷型別

因為排序閉包是實際參數傳遞給函數,所以 Swift 可以判斷他的形式參數類型及回傳型別

https://ithelp.ithome.com.tw/upload/images/20181025/20110801FQDznhnSk0.png

單表達式閉包隱式回傳

單行表達式閉包可以透過隱藏 return 來隱式回傳單行表達式的結果

https://ithelp.ithome.com.tw/upload/images/20181025/2011080150yPhxTXT1.png

參數名稱縮寫

Swift 為閉包提供參數名稱縮寫功能,能直接以 $0, $1, $2 這種方式來依序呼叫閉包的參數。如果使用了參數名稱縮寫,就可以省略閉包參數列表中對其定義,而且對應參數名稱縮寫的型別會透過函式型別自動推斷,所以 in 也會同被省略

https://ithelp.ithome.com.tw/upload/images/20181025/201108016lHgPysqyh.png

運算子函式

Swift 的 String 定義了關於大於符號等特定符號的實現,與 sorted 所需要的相符合

https://ithelp.ithome.com.tw/upload/images/20181025/20110801gxwH0Vyc2b.png

今天的 Closure 就到這裡囉!如果有其他的問題歡迎留言或是寄信給我!(*´∀`)


上一篇
Swift4.2 Day-09 Function ( 2 )
下一篇
Swift4.2 Day-11 Closure ( 2 )
系列文
菜比八iOS程式開發30天自我挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言