Когда переопределение наблюдателя didSet свойства приводит к рекурсии, почему?
class TwiceInt {
var value:Int = 0 {
didSet {
value *= 2
}
}
}
class QuadInt : TwiceInt {
override var value:Int {
didSet {
value *= 4
}
}
}
let t = TwiceInt()
t.value = 5 // this works fine
let q = QuadInt()
q.value = 5 // this ends up in recursion
Если я обновляю QuadInt
с помощью
class QuadInt : TwiceInt {
override var value:Int {
didSet {
super.value *= 4
}
}
}
q.value = 5 // q.value = 80
Итак, я думаю, что вызов будет чем-то вроде:
value = 5
QuadInt:didSet ( value *= 4 )
value = 20
TwiceInt:didSet ( value *= 2 )
value = 40
TwiceInt:didSet ( value *= 2 )
value = 80
Это более или менее похоже на стрельбу в темноте. Есть ли какой-либо документ о том, что происходит при обновлении свойства?