簡體   English   中英

Swift代碼中的這個[unown self]是做什么的?

[英]What is this `[unowned self] in` Swift code doing?

我遇到了我不理解的Swift代碼。 什么是navigationCallback分配給的? 什么是[unowned self] 如果可以在Objective-C中看到等效的示例,我想我會更好地理解。

navigationCallback = { [unowned self] in
    previousNavigationCallback?()
    if self.state != .Canceled {
        callback()
    }
}

什么是navigationCallback分配給的?

花括號中的內容構成了一個匿名函數。 這就像是Objective-C中的一個

什么是[unowned self]

方括號中的東西之前in在匿名函數的捕獲列表。 它通過將self保留為匿名函數來防止保留周期。 unowned所有權就像是Objective-C中的assign屬性策略(非ARC weak )。 在Objective-C中,您通常會進行弱勁舞以做類似的事情。

該構造稱為“捕獲列表”。 正如Matt所說,它使閉包/塊/匿名函數在塊內部具有對自身的無名引用。 當創建對象也強烈引用閉包時,它使您避免了由於閉包引起的保留周期,而閉包對創建它們的對象有很強的引用。

蘋果的Swift iBook中對此進行了詳細介紹。 這是一個簡短的摘錄:

解決關閉的強大參考周期您解決一個強大的關閉參考周期

通過將捕獲列表定義為閉包定義的一部分,在閉包和類實例之間進行引用循環。 捕獲列表定義了在閉包體內捕獲一個或多個引用類型時要使用的規則。 與兩個類實例之間的強引用循環一樣,您將每個捕獲的引用聲明為弱引用或無主引用,而不是強引用。 弱者或無人者的適當選擇取決於代碼不同部分之間的關​​系。

摘自:Apple Inc.“ Swift編程語言(Swift 2)”。iBooks。 https://itun.es/us/jEUH0.l

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM