Swift閉包
閉包(Closures)
本頁包含內容:
- 閉包表達式(Closure Expressions)
- 尾隨閉包(Trailing Closures)
- 值捕獲(Capturing Values)
- 閉包是引用類型(Closures Are Reference Types)
閉包是自包含的函數代碼塊,可以在代碼中被傳遞和使用。 Swift 中的閉包與 C 和 Objective-C 中的代碼塊(blocks)以及其他一些編程語言中的 lambdas 函數比較相似。
閉包可以捕獲和存儲其所在上下文中任意常量和變量的引用。 這就是所謂的閉合並包裹著這些常量和變量,俗稱閉包。Swift 會為您管理在捕獲過程中涉及到的所有內存操作。
注意:
如果您不熟悉捕獲(capturing)這個概念也不用擔心,您可以在 值捕獲 章節對其進行詳細了解。
在函數 章節中介紹的全局和嵌套函數實際上也是特殊的閉包,閉包采取如下三種形式之一:
- 全局函數是一個有名字但不會捕獲任何值的閉包
- 嵌套函數是一個有名字並可以捕獲其封閉函數域內值的閉包
- 閉包表達式是一個利用輕量級語法所寫的可以捕獲其上下文中變量或常量值的匿名閉包
Swift 的閉包表達式擁有簡潔的風格,並鼓勵在常見場景中進行語法優化,主要優化如下:
- 利用上下文推斷參數和返回值類型
-
隱式返回單表達式閉包,即單表達式閉包可以省略
return
關鍵字 - 參數名稱縮寫
- 尾隨(Trailing)閉包語法