我用属性重写编写了类继承。我发现观察存储属性不像其他重写那样工作。
这些类具有存储的属性和计算的属性以进行比较。
class Parent {
var storedProp : Int! {
didSet {
print("Parent stored property didSet")
}
}
var calcProp : Int {
print("Parent calculated property get")
return 100
}
}
class Child : Parent {
override var storedProp : Int! {
didSet {
print("Child stored property didSet")
}
}
override var calcProp : Int {
print("Child calculated property get")
return 101
}
}
当我实例化Child对象并获得计算属性时。子类中的属性将覆盖父类的属性,但不起作用。
var obj = Child()
let value = obj.calcProp
我期望在财产观察上也会发生同样的事情,但是对孩子和父母的财产观察都起作用。看起来像传播。
obj.storedProp = 999
// Parent stored property didSet
// Child stored property didSet
它是故意的吗?。以及如何防止传播?
Swift编程语言(Swift 2.2)的“继承”部分将“覆盖属性观察器”描述为“添加属性观察器”
覆盖属性观察者
您可以使用属性覆盖将属性观察器添加到继承的属性...
在以下示例中,如果子类能够覆盖类didSet
的currentSpeed
属性的观察者AutomaticCar
:
class AutomaticCar {
var currentSpeed: Double {
didSet {
gear = Int(currentSpeed / 10.0) + 1
}
}
}
didSet
子类中的in会阻止更新gear
属性,这可能会破坏超类AutomaticCar的设计行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句