如您所说,您不能简单地在子类中重新定义常量(毕竟,它是一个常量)。您收到的错误是“无法使用存储的属性覆盖”。它似乎是可以覆盖一个
var,但是,当我改变了
letsomeVariable对
var someVariable我碰到一个“暧昧使用‘someVariable’的”当我访问它的子类(注意-
同样的事情发生了,我是否使用
override与否)。
最简单的解决方案是使用吸气剂。这实际上是一个函数,因此您可以愉快地重写它,将为您管理后备变量,如果您不提供设置器,则该变量对于每个类都是恒定的:
class baseView: UIView { var someVariable: Int { get { return 1 } } // do some work with someVariable}class ExtendedView: baseView { override var someVariable: Int { get { return 2 } }}let a = baseView()a.someVariable // 1let b = ExtendedView()b.someVariable // 2正如评论员@ user3633673指出的那样,如果 只有
一个getter(而不是setter),则可以删除
get,但是为了清楚起见,我将其保留了下来。没有它就一样…
class baseView: UIView { var someVariable: Int { return 1 } // do some work with someVariable}class ExtendedView: baseView { override var someVariable: Int { return 2 }}let a = baseView()a.someVariable // 1let b = ExtendedView()b.someVariable // 2…,当然,在Swift 5中,您可以删除
return:
class baseView: UIView { var someVariable: Int { 1 }}class ExtendedView: baseView { override var someVariable: Int { 2 }}


