Swift速成:捕獲列表

威士忌發表於2015-03-18

這是一系列短文中的第一篇,會簡單介紹些你可能不知道的東西。我也會努力嘗試穿插寫些更深入的長文。

捕獲列表

很多人不知道Swift中可以顯式地指定閉包的捕獲列表。

閉包封蓋了區域性環境變數,併為閉包內的程式碼建立了一個新的執行環境。Objective-C程式碼塊或C#的lambda都是閉包的例子。假如你希望真正瞭解閉包,執行環境,命名繫結等,我推薦計算機程式的構造和解釋這些過時但極優秀的視訊列表

通過標記self為unowned或者用weak來打破 retain cycle,這種方法常常用來修改閉包捕獲的這個 self 的屬性

蘋果官方語言指南要求如果閉包和其捕獲的物件相互引用,應該使用unowned,這樣能夠保證他們會同時被銷燬。這大概是為了避免物件被釋放後維護weak引用空指標的開銷。

函式

大部分人沒有意識到自己可以建立如下新的命名變數:

這避免了引用thing1thing2時汙染周圍程式碼。作為加分項,thing2還是個weak引用。

捕獲列表需要尾隨in關鍵字,並且緊跟著引數列表假如你有需要:

元(meta)

這是這篇短文的所有。假如你有任何建議和糾錯請告知我。

相關文章