第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在“純” Swift中創(chuàng)建弱協(xié)議引用(不帶@objc)

如何在“純” Swift中創(chuàng)建弱協(xié)議引用(不帶@objc)

達令說 2019-11-21 12:53:14
weak除非a protocol聲明為@objc,否則引用似乎在Swift中不起作用,我不希望在純Swift應(yīng)用程序中使用它。這段代碼給出了一個編譯錯誤(weak不能應(yīng)用于非類類型MyClassDelegate):class MyClass {  weak var delegate: MyClassDelegate?}protocol MyClassDelegate {}我需要給協(xié)議加上前綴@objc,然后它才能工作。問題:什么是完成Swift的“純” Swift方法weak delegate?
查看完整描述

3 回答

?
一只萌萌小番薯

TA貢獻1795條經(jīng)驗 獲得超7個贊

您需要將協(xié)議類型聲明為class。


protocol ProtocolNameDelegate: class {

    // Protocol stuff goes here

}


class SomeClass {

    weak var delegate: ProtocolNameDelegate?

}

我的理解是,使用class,您可以確保僅在類上使用此協(xié)議,而不會在枚舉或結(jié)構(gòu)之類的其他東西上使用。


查看完整回答
反對 回復 2019-11-21
?
慕桂英4014372

TA貢獻1871條經(jīng)驗 獲得超13個贊

補充答案

我一直對代表是否應(yīng)該軟弱感到困惑。最近,我了解了有關(guān)委托的詳細信息以及何時使用弱引用,因此為了將來的讀者,讓我在此處添加一些補充要點。


使用weak關(guān)鍵字的目的是避免強參考循環(huán)(保留循環(huán))。當兩個類實例相互具有強引用時,就會發(fā)生強引用循環(huán)。他們的參考計數(shù)永遠不會為零,所以他們永遠不會被釋放。


weak如果委托是一個類,則僅需要使用。Swift結(jié)構(gòu)和枚舉是值類型(在創(chuàng)建新實例時會復制它們的值),而不是引用類型,因此它們不會構(gòu)成強引用周期。


weak引用始終是可選的(否則,您將使用unowned),并且始終使用var(非let),以便可以在nil取消分配可選項時將其設(shè)置為。


父類自然應(yīng)該對其子類有強烈的引用,因此不要使用weak關(guān)鍵字。但是,當孩子想要引用其父母時,應(yīng)通過使用weak關(guān)鍵字使其成為弱引用。


weak當您想要引用一個您不擁有的類時,應(yīng)該使用,而不是僅用于引用其父類的孩子。當兩個非層次類需要相互引用時,請選擇一個弱類。您選擇的一種取決于情況。有關(guān)更多信息,請參見此問題的答案。


通常,應(yīng)將委托人標記為,weak因為大多數(shù)委托人都在引用他們不擁有的類。當孩子使用委托與父母溝通時,這絕對是正確的。文檔建議使用弱引用作為委托。(但是看這個,太)。


協(xié)議可用于引用類型(類)和值類型(結(jié)構(gòu),枚舉)。因此,在可能需要弱化委托的情況下,必須使其成為僅對象協(xié)議。做到這一點的方法是添加AnyObject到協(xié)議的繼承列表中。(過去您是使用class關(guān)鍵字來完成此操作的,但AnyObject現(xiàn)在是首選。)


protocol MyClassDelegate: AnyObject {

    // ...

}


class SomeClass {

    weak var delegate: MyClassDelegate?

}

進一步研究

閱讀以下文章有助于我更好地理解這一點。他們還討論了相關(guān)問題,例如unowned關(guān)鍵字和閉包發(fā)生的強大參考周期。


查看完整回答
反對 回復 2019-11-21
  • 3 回答
  • 0 關(guān)注
  • 631 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號