If you would like to override a setter, but keep your property readable, then you need to make a variable to "back" the property:
private var storedUserState: UserState
var userState: UserState {
get {
return storedUserState
}
set {
print("Before: \(self.storedUserState)")
storedUserState = newValue
print("After: \(self.storedUserState)")
}
}
If you would like to customize a setter method, but would prefer the property to remain stored, use property observers instead of overriding the accessors:
var userState: UserState = nil {
willSet(newState) {
print("About to set userState: \(newState)")
}
didSet {
print("Finished: new=\(userState), old=\(oldValue)")
}
}