8

我正在使用第三方框架,该框架提供了一个实例只有属性的类。在我的应用程序中,我想为此实例添加一个额外的属性。对于这种情况,执行此操作的适当方法是什么?

a) 在我的应用程序中扩展框架的类

b)创建框架类的子类并定义我需要的新属性

提前致谢

4

2 回答 2

16

它是

b)

因为不支持在类扩展中添加(存储)属性。

使用扩展有两个重要的规则:

  • 扩展可以为类型添加新功能,但不能覆盖现有功能

  • 扩展可以添加新的计算属性,但它们不能添加存储的属性,或者向现有属性添加属性观察者

于 2016-08-08T10:53:56.517 回答
8

这取决于您期望实现的行为。

扩展:只能添加新方法计算变量,但您将在代码中实现无缝工作。无需在代码中添加新类即可在任何地方使用新功能

子类化:可以添加新的变量覆盖函数,但代码中的占用空间更大。您将需要在整个项目中使用该特定子类。

我想这更像是一个设计问题。

我的建议:如果整个项目需要这种新行为,请使用extensions,否则使用subclass

于 2016-08-08T11:24:28.007 回答