【发布时间】:2016-10-28 19:02:21
【问题描述】:
您只能将计算变量与setter 和getter 一起使用来覆盖超类的存储属性。我通过尝试以下代码得出了这个结论。我不确定我是 100% 正确的。如果我错了,请纠正我。谢谢!
class SuperClass {
var ID = 2202
}
//Wrong
class SubClass: SuperClass {
override var ID = 2203
}
//worng
class SubClass: SuperClass {
override var ID: Int {
return super.ID + 1
}
}
//Correct
class SubClass: SuperClass {
override var ID: Int {
get {
return super.ID + 1
}
set {
}
}
}
【问题讨论】:
-
你的超类声明它的对象包含一个可变属性
ID。由于子类对象可以与子类对象互换,子类对象必须包含一个属性ID,它是 mutable (即使我们在上面的示例中使用“虚拟”设置器:实际上并不改变值) .如果您尝试将子类对象传递给例如,这很明显。func foo(bar: SuperClass) { bar.ID = 42 };如果允许子类仅使用 getter 覆盖ID,那么使用此类对象调用foo(...)将没有多大意义。
标签: swift class overriding