जब प्रत्यावर्तन में एक संपत्ति परिणामों की didSet पर्यवेक्षक अधिभावी में अधिभावी 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
अगर मैं अद्यतन
class QuadInt : TwiceInt {
override var value:Int {
didSet {
super.value *= 4
}
}
}
q.value = 5 // q.value = 80
तो मैं कॉल लगता QuadInt
साथ रहने के लिए कुछ की तरह:
value = 5
QuadInt:didSet (value *= 4)
value = 20
TwiceInt:didSet (value *= 2)
value = 40
TwiceInt:didSet (value *= 2)
value = 80
यह कम या ज्यादा अंधेरे में शूटिंग की तरह है। क्या कोई प्रॉपर्टी अपडेट होने पर क्या होता है पर कोई दस्तावेज है?
लेकिन अगर ऐसा है, तो क्यों 't = TwiceInt() t.value = 5''' ठीक काम करता है? – chunkyguy
ऐप्पल के स्विफ्ट दस्तावेज के अनुसार, 'डीडसेट' में एक मान बदलने से रिकर्सन नहीं होता है (यह दस्तावेज़ों में क्रियापद है)। – Mecki