簡體   English   中英

Swift:如何解決“協議”類型的弱變量是非法的問題

[英]Swift: how to work around issue where weak variable of type 'protocol' is illegal

在閱讀了有關此問題的一些帖子之后,我發現我的協議應該繼承“class”,以便'weak'能夠處理我的委托變量。

'weak'可能只適用於類或類綁定協議類型。

如果我的協議沒有從'class'繼承,那么swift'推斷'它應該是弱的嗎?

這是將“協議”類型的變量強制轉換為弱的事實上的方法嗎?

在內存管理方面會發生什么

protocol FacebookLoginViewControllerDelegate: class {
    func facebookLoginViewControllerDidLogin(controller: FacebookLoginViewController)
}

class FacebookLoginViewController: UIViewController {

    weak var delegate: FacebookLoginViewControllerDelegate?

}

使用: class class綁定的協議類只是告訴編譯器它只能表示一個引用類型 - 因此你可以在它上面使用weak屬性。

如果沒有標記的協議為被類約束,那么斯威夫特會認為它可以代表無論是引用或值類型。 因為ARC(自動引用計數)僅適用於引用,而不適用於值,因此編譯器將阻止您將weak屬性放在其上。

ARC不能使用值類型的原因是因為它們在傳遞它們時會被復制 ,而不是通過引用傳遞。 因此,與參考類型不同,它們的生命周期可以很容易地管理,因為它們的生

對於引用類型,如果您使用委托模式,那么delegate應該總是weak ,以避免保留周期 - 因此協議應始終是類綁定。 使用委托的值類型幾乎沒有任何意義,因為它總是引用您分配給它的副本。

暫無
暫無

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

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