首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类继承的好处,什么时候可以使用协议扩展?

类继承的好处,什么时候可以使用协议扩展?
EN

Stack Overflow用户
提问于 2015-06-14 02:49:12
回答 3查看 392关注 0票数 4

我对带有协议扩展的漂亮代码的可能性很感兴趣。但我似乎并不理解阶级继承之间的真正区别。

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

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

因此,问题在于类继承具有哪些特性,哪些协议扩展没有;或者何时使用类继承而不是协议扩展。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-29 04:53:33

我发现的唯一真正好处是您可以创建超类对象,这些对象不是子类,因此您可以忽略子类的任何实现细节。

如果A是B的超类,那么您可以创建A,而不必关心B中的任何内容。

对于协议,您总是必须使用采用的struct/class。

在某些情况下,创建一个UIResponder而不是一个UIViewController是有意义的,因为您不需要这种功能,而且只使用具有更少特性的类更安全、更容易。

如果只使用协议及其扩展,则必须选择一个实现,因此,要避免两次编写相同的代码,就必须有多个协议,对应的类层次结构的每个层次都有一个协议。

如果P2采用P1,而P1E是对P1的扩展,而P2E是P2的扩展,那么必须创建一个采用P1的结构/类,这样才能得到采用P2的结构/类的能力较低的版本。

票数 0
EN

Stack Overflow用户

发布于 2015-06-17 13:51:30

类继承的“好处”是您可以继承存储的属性和初始化器,这些属性和初始化器也可以从子类继承默认实现。

但这些只是一点点好处,至少对我来说是这样。

票数 1
EN

Stack Overflow用户

发布于 2015-10-13 09:26:38

如果不是可可,可能就没有了。

一种过于简化的方法是“在处理协议、使用扩展和处理对象时,使用子类”。

更简单的是,当你用Swift编程的时候,你必须处理Cocoa,当你处理Cocoa的时候,你必须处理对象。当你不得不处理对象时,有时最好的方法就是子类化。

UIViewController为例,我们都必须用它来计算。据我所知,没有UIViewControllerProtocol。这意味着UIViewController有很多你不能通过声明协议一致性来重新实现的外挂行为。如果你想让你的应用程序的主UIViewController具有自定义功能--我们都这样做--你必须对它进行子类化。然后你通过继承得到所有这些行为。

我想另一种说法是,在那些情况下,类继承优于协议扩展,因为您别无选择,只能处理设计时没有协议的对象。

对我们这些迅速的人来说,这种情况经常发生。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30828465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档