簡體   English   中英

協議默認實現可以覆蓋方法嗎?

[英]Can a method be overridden by protocol default implementation?

從Swift 2開始,可以在協議中為將要實現這些協議的類提供我們自己的方法實現( 協議默認實現 )。 但是我們可以覆蓋現有方法嗎?

對我來說,Swift 2中的協議看起來像是協議+類別的混合體。 雖然總的來說這很好,並且開始促進基於組合的編程而不是基於繼承的編程,但是我無法覆蓋現有方法,因此具有完全的控制力和靈活性,並且具有完整的組合。 這意味着能夠使用默認實現抓住一堆協議,從而將所需的行為添加到我的類中(並在需要時覆蓋)。 如果不可能直接解決,也許有一種解決方法?

更新 我要這樣做的原因是我不喜歡使用UITableViewController和UICollectionViewController。 相反,我有自己的頂級超類CoreViewController和幾個第二層基類(BaseViewController,BaseDetailsViewController和BaseWebViewController),其中包含所有常見的共享代碼。 是的,這是繼承,我希望使用組合有一個不同的實現,因此我喜歡協議中的Swift 2方法。 這樣,我將能夠使用UITableViewController(帶有靜態單元格)並仍然附加我的通用代碼。 但是,我需要能夠重寫其方法,例如alloc。 我有一個非常簡單的方法(該方法的實現)[ https://github.com/GitTennis/SuccessFramework/blob/master/Templates/ BusinessApp / BusinessApp /Core/CoreViewController.m] ,它可以自動為我的通用對象自動選擇正確的視圖控制器類應用程序(我所有的視圖控制器都有_ipad或_iphone后綴)。

從WWDC視頻中回想起,如果一個類提供了一種方法的實現,該方法也具有協議默認實現,則該類中的一個將獲勝。 也就是說,僅在該類不提供協議的情況下才使用協議的實現。

IMO,如果這是另一種方式(或者如果存在通過協議實現覆蓋類實現的另一種方法),那將打開一些討厭的門。 例如,突然間,標准框架功能因此而工作不同。

無論如何,您為什么要通過協議默認實現覆蓋現有的類方法?

暫無
暫無

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

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