当我覆盖函数noise
时,该函数被替换为新函数。但是当我用一个观察者覆盖一个属性时,旧的和新的值都会被执行。覆盖属性观察者
在操场:
class Vehicle {
func noise(sound: String) {
println("Vehicle sound sounds like \(sound)")
}
}
class Train: Vehicle {
override func noise(sound: String) {
println("A train does: \(sound)")
}
}
输出:
var oldTrain = Train()
bulletTrain.noise("tjoek tjoek") // Prints: "A train does: tjoek tjoek"
但是,当我做同样与观察者的属性:
在操场:
class Foo {
var something: Int! {
didSet {
println("vroom")
}
}
}
class Bar: Foo {
override var something: Int! {
didSet {
println("toot toot")
}
}
}
输出:
var foobar = Bar()
foobar.something = 3 // Prints: "vroom" & "toot toot"
所以我怎么重写与观察者的属性,以及如何防止被以及执行旧的价值观念?
似乎没有办法阻止旧的属性观察者被执行。 – mrahmiao
它是惊人的,你不能重写'didSet' – Fattie