簡體   English   中英

協議與多態迅速

[英]Protocols versus polymorphism in swift

對於面向對象的編程,我還是一個新手,我正在嘗試將協議,委托和多態性放在首位。 最近,我觀看了一個培訓視頻,該視頻宣傳了當您有兩個類且方法實現相似時,協議是完美實現此目的的最佳解決方案。 那講得通。 但是,一些其他研究使我發現了多態性,這似乎也是一種首選方法,而您可以簡單地使用基類對功能進行建模並在子類中更新這些方法。

所以,我有兩個問題。 首先,我對多態性的理解正確嗎? 我對所有這些概念還很陌生。 其次,協議是否勝過多態性?何時使用一種協議而不是另一種協議?

謝謝!

在某些情況下,協議是更合適的解決方法,而在某些情況下,基類是解決方案。

在Swift基類中,您可以共享相同的實現,從而減少代碼冗余。 但是,基類不會強制其子類覆蓋其方法。 因此,如果所有子類都應重寫某個特定方法,則基類將無法實施(很快沒有抽象類可以使實現與需求混合在一起)。 有多種方法可以“破解”它,例如,通過在基本類實現中包含fatalError()來強制程序員重寫它(否則,基本實現會導致崩潰)-但這是運行時錯誤。 因此,如果基類只適合您,那么這可能是一個很好的方法,但是如果您正在實現庫/框架,並且希望庫的用戶將其子類化,則必須考慮這些問題。

另一方面,協議是合同定義。 協議定義了必須執行哪些方法才能實現該協議。 因此,每個協議實現類都將被迫實現那些方法。 這通常是您想要的-您希望通過合同將實現類綁定以滿足協議的要求。 但是,使實現類共享代碼會有點困難。 看一下協議擴展。 協議擴展允許您將“默認”實現添加到協議方法中。

您可以看一下我的博客中有關面向協議的編程的文章,以了解更多有關它的爭論。

暫無
暫無

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

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