SwiftMidOpen-ended
What happens if you assign to a property inside its own `didSet`?
Explanation & Code
Answer: The value you assign replaces the one that was just set, and the observers are not triggered again, so there is no infinite loop.
Code Example:
struct Volume {
var level: Int = 0 {
didSet {
// Clamp into 0...100 — does NOT re-trigger didSet
if level > 100 { level = 100 }
if level < 0 { level = 0 }
}
}
}
var v = Volume()
v.level = 150
print(v.level) // 100
Key Points:
- This makes
didSeta common place for clamping or normalizing input. - In contrast, assigning to a property inside its own computed setter does recurse infinitely — a computed property has no storage, so
self.x = newValueinsidex'ssetjust calls the setter again.
var name: String {
get { name } // ❌ infinite recursion
set { name = newValue }
}
Rate your understanding: