(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 的值
使用閉包将集合轉換為單個值。
舉例:集合求和
建立閉包時,閉包可以捕獲作用域中的任何内容。