當我覆蓋函數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