天天看點

Swift 文法初探(3)—— 閉包

(10)閉包

10-1 概念

10-2 基本格式

10-3 四種閉包基本形式

10-4 尾随閉包

10-5 閉包的縮寫

10-6 使用閉包的集合函數

[1] map

[2] filter

[3] reduce

10-7 閉包可以捕捉系統環境

按照官方解釋來講,閉包是一種自包含的匿名函數代碼塊,它可以作為表達式、函數參數或者函數傳回值。閉包表達式的運算結果是一種函數類型。因為我沒有學過 Objective-C,是以不知道它與 OC 中的 blocks 有何差別。 我個人在了解閉包的時候,常常把它當匿名函數看待。
上面定義中說了,閉包表達式不僅可以作為函數的傳回值進行傳遞,它還可以作為函數的參數進行傳遞。但是從上面的例子中我們可以看出來,“閉包寫起來非常長”。是以如果把整個閉包寫到參數清單中,那麼會顯得非常臃腫,難看。 是以尾随閉包的出現,就是要允許将閉包這個“參數”,尾随在函數()後面,進而減少臃腫。

下面從例子來感受一下:

第1種寫法:把閉包當參數傳進去

第2種寫法:尾随閉包

完整格式

省略閉包中參數的類型

省略傳回值類型

省略參數名稱

省略 return

Swift 有一些類似函數式程式設計的内容,比如使用閉包的集合函數。
通過對每個項目應用閉包來傳回一個新集合。

舉例:将 firstNames 集合轉換為 fullNames 集合

傳回一個通過閉包篩選的新集合。

舉例:篩選出小于 20 的值

使用閉包将集合轉換為單個值。

舉例:集合求和

建立閉包時,閉包可以捕獲作用域中的任何内容。