Khi ghi đè trình quan sát didSet của thuộc tính dẫn đến đệ quy, tại sao?Swift: Ghi đè kết quả didSet trong đệ quy
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
Nếu tôi cập nhật QuadInt
với
class QuadInt : TwiceInt {
override var value:Int {
didSet {
super.value *= 4
}
}
}
q.value = 5 // q.value = 80
Vì vậy, tôi đoán cuộc gọi đến được một cái gì đó như:
value = 5
QuadInt:didSet (value *= 4)
value = 20
TwiceInt:didSet (value *= 2)
value = 40
TwiceInt:didSet (value *= 2)
value = 80
này là nhiều hơn hoặc ít hơn như chụp trong bóng tối. Có bất kỳ tài liệu nào về những gì xảy ra khi một tài sản cập nhật không?
Nhưng nếu đó là trường hợp, thì tại sao '' 'let t = TwiceInt() t.value = 5''' hoạt động tốt? – chunkyguy
Theo tài liệu Swift của Apple, việc thay đổi giá trị trong 'didSet' không gây ra đệ quy (đó là nguyên văn trong tài liệu). – Mecki