鐵人的第三天,來聊聊閉包
- 閉包是一種函式
- 閉包是沒有名稱的函式且無法獨立存在,需儲存在一個常數裡
- 可以被當作參數來傳遞
- 蘋果官方Cloure語法內(Closure Expression Syntax)
{ (parameters) -> return type in
statements
}
{(參數) -> 回傳型別 in
程式碼
}
尾隨閉包 (Trailing Closures)
- 當閉包表達式為function的最後一個參數,就可以使用尾隨閉包
- 在呼叫閉包的時候可以移除參數及冒號

捕獲值 (Capturing Values)
- 閉包能夠從上下文中捕獲已被定義的常數和變數。
- 最簡易使用是嵌套函式,即是定義在函式內的“函式”
- 嵌套函式可捕獲外部函式所有的參數以及定義的常數和變數

Closures Are Reference Types
從上述的例子,thing為常數。但裡面常數的值還是能夠被捕獲。
是因為functions和closures都是reference type。
不論定義了幾個常數或變數,常數或變數的值都是參考同一個位置的記憶體
逃逸閉包(Escaping Closures)
一般傳入函式的閉包,會造著步驟立即被執行。
逃逸閉包是在函式執行結束之後才會被呼叫。

- 在呼叫陣列第一順序時,逃逸閉包的函式才被加入。在函式執行完後才執行到“閉包執行”。