gpt4 book ai didi

ios - swift 中的协议(protocol)与多态性

转载 作者:可可西里 更新时间:2023-11-01 00:39:16 25 4
gpt4 key购买 nike

我是面向对象编程的新手,我正尝试着手研究协议(protocol)、委托(delegate)和多态性。我最近观看了一个培训视频,该视频宣传当您有两个具有相似方法实现的相似类时,协议(protocol)是优雅地实现这一目标的最佳解决方案。那讲得通。然而,一些额外的研究让我发现了多态性,这听起来也是一种首选方法,而您可以简单地使用基类来建模功能并在子类中更新这些方法。

所以,我有两个问题。首先,我对多态性的理解正确吗?我对所有这些概念还是很陌生。其次,协议(protocol)是否胜过多态性?您什么时候会使用一个而不是另一个?

谢谢!

最佳答案

有些情况下协议(protocol)更合适,有些情况下基类是解决方案。

在 Swift 中,基类允许您共享相同的实现,从而减少代码冗余。但是,基类不会强制其子类覆盖其方法。因此,如果所有的子类都应该覆盖某些特定的方法,那么基类将很短以强制执行它(swift 中没有抽象类可以将实现与需求混合)。有一些方法可以“破解”它,例如,通过在基类实现中包含 fatalError() 来强制程序员覆盖它(否则基实现会导致崩溃)——但这是一个运行时错误。因此,如果基类只适合您,这可能是一个好方法,但如果您正在实现一个库/框架,并且您希望库的用户对其进行子类化,那么您必须考虑这些问题。

另一方面,协议(protocol)是契约(Contract)定义。协议(protocol)定义了必须实现哪些方法才能实现该协议(protocol)。因此每个协议(protocol)实现类都将被迫实现这些方法。这通常是您想要的 - 您希望通过契约绑定(bind)实现类以满足协议(protocol)的要求。然而,让实现类共享代码有点困难。为此查看协议(protocol)扩展。协议(protocol)扩展允许您向协议(protocol)方法添加“默认”实现。

你可以看看我的blog article关于面向协议(protocol)编程的更多争论。

关于ios - swift 中的协议(protocol)与多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49346679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com