안녕하세요! 오늘은 드디어 속성 마지막 편인, 속성감시자 포스팅입니다.
속성감시자는 일반적인 속성과는 다르게 말 그대로 감시하는 속성이라고 생각하면 되겠습니다!
Property observers observe and respond to changes in a property’s value. Property observers are called every time a property’s value is set, even if the new value is the same as the property’s current value.
속성 감시자는 프로퍼티의 값의 변화를 관찰하고 감시하는 속성입니다. 속성 값을 설정할 때마다(기존 값과 같더라도) 속성 감시자가 호출됩니다.어떤 속성이 변하는 시점을 알고 싶을 때 사용하기 좋습니다.
어떤 값을 '저장'하는 역할이 아니라 어떤 값이 '변할 때(값이 같아도 됨)' 관찰하고 감시하는 메서드라고 생각하면 됩니다.
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("totalStep이 \(newTotalSteps)으로 변할 예정입니다. ")
}
didSet (oldTotalSteps){
if totalSteps > oldTotalSteps {
print("totalStep이 \(totalSteps - oldTotalSteps) 만큼 추가되었습니다.")
}
}
}
init(totalSteps: Int) {
self.totalSteps = totalSteps
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// totalStep이 200으로 변할 예정입니다.
// totalStep이 200만큼 추가되었습니다.
stepCounter.totalSteps = 360
// totalStep이 360 변할 예정입니다.
// totalStep이 160 추가되었습니다.
stepCounter.totalSteps = 896
// totalStep이 896 변할 예정입니다.
// totalStep이 536 추가되었습니다.
파라미터를 생략가능합니다.
class StepCounter {
var totalSteps: Int = 0 {
willSet {
print("totalStep이 \(newValue)으로 변할 예정입니다. ")
}
didSet {
if totalSteps > oldValue {
print("totalStep이 \(totalSteps - oldValue) 만큼 추가되었습니다.")
}
}
}
}