Gdy zastąpię funkcję noise
, funkcja zostanie zastąpiona przez nową. Ale kiedy przesłonię nieruchomość obserwatorem, stara i nowa wartość zostaną wykonane.Zastępowanie obserwatora właściwości
W Playground:
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)")
}
}
wyjściowa:
var oldTrain = Train()
bulletTrain.noise("tjoek tjoek") // Prints: "A train does: tjoek tjoek"
Ale kiedy zrobić to samo z własności z obserwatorem:
W Playground:
class Foo {
var something: Int! {
didSet {
println("vroom")
}
}
}
class Bar: Foo {
override var something: Int! {
didSet {
println("toot toot")
}
}
}
Wyjście:
var foobar = Bar()
foobar.something = 3 // Prints: "vroom" & "toot toot"
W jaki więc sposób mam zastąpić nieruchomość z obserwatorem i jak zapobiec również starszym wartościom?
Wygląda na to, że nie można uniemożliwić uruchomienia starego obserwatora własności. – mrahmiao
To niesamowite, że nie można przesłonić 'didSet' – Fattie