【问题标题】:Class extension vs. subclassing in Swift?Swift 中的类扩展与子类化?
【发布时间】:2016-12-14 02:44:19
【问题描述】:

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

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

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

提前致谢

【问题讨论】:

    标签: ios swift properties subclass class-extensions


    【解决方案1】:

    这是

    b)

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

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

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

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

    【讨论】:

    • @AppsDev 扩展非常有用,因为您只需简单的复制粘贴即可在多个项目中轻松使用它们。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 也感谢您的回答
    • 我认为最后一点经常被忽略。扩展是全局的,因此它们会影响可能不需要复杂性的代码部分。出于这个原因,我认为在这种情况下应该避免使用它们。
    猜你喜欢
    • 2018-12-30
    • 2014-12-01
    • 2017-04-24
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    • 2014-07-24
    相关资源
    最近更新 更多