1. 프로퍼티 감시자
- 프로퍼티 값 변경시 원하는 동작 수행 가능
- 연산 프로퍼티에서 사용 불가
- 변경되려는 값이 기존 값과 동일해도 프로퍼티 감시자는 항상 동작
- 함수, 메소드, 클로저, 타입 등의 지역/전역 변수에 모두 사용 가능
- willSet/didSet - 둘 중 하나만 구현해도 됨
- willSet : 값 변경 직전 호출됨. 암시적 매개변수 "newValue" 사용
- newValue를 다른 이름으로 변경해서 사용 가능
- didSet : 값 변경 직후 호출됨. 암시적 매개변수 "oldValue" 사용
- oldValue를 다른 이름으로 변경해서 사용 가능
2. 정의 및 사용
struct Money {
var currencyRate: Double = 1100 {
willSet(newRate) {
print("환율이 \(currencyRate)에서 \(newRate)으로 변경될 예정입니다")
}
didSet(oldRate) {
print("환율이 \(oldRate)에서 \(currencyRate)으로 변경되었습니다")
}
}
var dollar: Double = 0 {
willSet {
print("\(dollar)달러에서 \(newValue)달러로 변경될 예정입니다")
}
didSet {
print("\(dollar)달러에서 \(oldValue)달러로 변경되었습니다")
}
}
var won: Double {
get {
dollar * currencyRate
}
set {
dollar = newValue / currencyRate
}
}
}
var moneyInMyPocket: Money = Money()
moneyInMyPocket.currencyRate = 1150
moneyInMyPocket.dollar = 10
print(moneyInMyPocket.won)