首页 文章

当你可以使用协议扩展时,类继承的好处是什么?

提问于
浏览
4

我对具有协议扩展的漂亮代码的可能性着迷 . 但我似乎并未掌握类继承的真正区别 .

我知道有不同的方法来建模,比如我可以使用合成而不是类继承 .

但后来我知道了类继承的特性,那就是子类可以非常容易地使用超类的实现 . 通过协议扩展,我也有这个功能,即使对于值类型也是如此 .

所以问题是类继承有哪些特性,哪些协议扩展没有;或何时使用类继承而不是协议扩展 .

3 回答

  • 1

    类继承的“好处”是你可以继承存储的属性和初始化器,它们也可以从子类中获得默认实现 .

    但至少对我来说,这些只是微不足道的好处 .

  • 0

    如果没有Cocoa,可能没有 .

    一种过于简化的方式是“当你使用协议,使用扩展,当你处理对象时,使用子类” .

    不那么简单,当你需要处理Cocoa时,以及当你需要处理对象时.1502113_ . 当你必须处理对象时,有时最好的做法是子类化 .

    UIViewController ,我们都必须考虑到这一点 . 据我所知,没有 UIViewControllerProtocol . 这意味着 UIViewController 有很多实际行为,你可以't just re-implement by declaring conformance to a protocol. If you want your app' s main UIViewController 具有自定义功能 - 我们都做 - 你必须将它子类化 . 然后通过继承获得所有这些行为 .

    我想另一种说法是,在你没有选择,只能处理没有协议设计的对象时,类继承优于协议扩展 .

    对于我们斯威夫特人来说,经常发生这种情况 .

  • 1

    我发现的唯一真正好处是你可以创建超类对象,它们不是子类,所以你可以忽略子类的任何实现细节 .

    如果A是B的超类,那么你可以创建A而不必关心B中的任何东西 .

    使用协议,您始终必须使用采用结构/类 .

    在某些情况下,创建UIResponder而不是UIViewController是有意义的,因为您不需要该功能,并且使用具有 less 功能的类更安全,更容易 .

    仅使用协议及其扩展,您必须选择一个实现,因此,为了不两次编写相同的代码,必须有多个协议,一个用于相应类层次结构的每个层次结构级别 .

    如果P2采用P1而P1E是P1的扩展而P2E是P2的扩展,则必须创建一个仅采用P1的结构/类来获得采用P2的结构/类的能力较弱的版本 .

相关问题