【问题标题】:Swift - what should the default values of properties be in the parent class?Swift - 父类中属性的默认值应该是什么?
【发布时间】:2016-08-29 02:12:20
【问题描述】:

不确定我是否正确地表达了这个问题,但这是我的问题:我有一个基类和一个子类,我的基类永远不应该单独实例化(在其他语言中它是抽象的)。我知道抽象类在 Swift 中不是一个东西。我有一些计算出来的只读属性会改变它们在每个子类中返回的内容;它们或多或少是定制的常量。首先,重写的计算属性是处理这种事情的最佳方式吗?其次,如果这些变量需要初始化,即不能为nil,在父类中应该初始化成什么?有没有办法以其他方式指示父类不应自行初始化?

【问题讨论】:

  • Swift 有协议和协议扩展而不是抽象类。您应该创建一个协议而不是您的类,它具有所有公开可见的功能,然后实现所有,这在基类中称为协议扩展。

标签: swift class oop abstract-class


【解决方案1】:

在您的情况下,您可能应该使用协议而不是基类。所有常见的实现都可以在协议扩展中完成,您无需为常量提供默认值 - 只需在协议中指定所需的 get 方法即可。

【讨论】:

  • 我可能应该提到这一点,但我知道 Swifts 协议功能,但不确定它是否适合这样的事情。如果我错了,请纠正我,但根据 OOP 的“is-a”原则,父类不应该总是类而不是协议吗?还是 swift 在这方面有点不同?
  • 我认为它是协议的正确用例,尽管我不能指出更权威的来源:) 在某种程度上,快速协议充当抽象类 - 它们定义接口并提供实现某些功能的能力这些接口的一部分。但是协议也比类继承更灵活 - 多重继承不那么尴尬,如果它不像你的情况那样有意义,你不需要在基类中提供实现。
猜你喜欢
  • 2012-06-09
  • 2010-12-06
  • 2011-02-28
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 2019-09-08
  • 2015-08-25
  • 2011-12-11
相关资源
最近更新 更多