프로퍼티 감시자
프로퍼티
의 값이 변경될 때, 원하는 동작을 수핼할 수 있도록 한다.
연산 프로퍼티
내부에는 프로퍼티 감시자
기능을 수행하는 willSet
, didSet
을 사용할 수 없다. -> 프로퍼티 감시자
는 저장 프로퍼티
의 값이 변경될 때 정의할 수 있는 것이기떄문에, 반드시 저장 프로퍼티
내부에 구현되어야 한다.
- 값이 변경될 때 블록이 실행되지만, 변경되기 이전의 값과 동일한 값으로 변경이 되어도 블록이 실행된다.
- 상속받지 않은
연산 프로퍼티
에는 프로퍼티 감시자를 적용할 수 없지만, 상속받은 연산 프로퍼티
에는 오버라이드를 통해 감시자를 적용할 수 있다.
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("\(oldValue)에서 \(dollar)로 변경되었습니다.")
}
var won : Double{
get {
return dollar * currencyRate
}
set {
dollar = newValue / currencyRate
}
}
}
지역변수, 전역변수
프로퍼티 감시자
또한 연산 프로퍼티
와 마찬가지로 지역변수/전역변수
에서 모두 사용 가능하다.
var a: Int = 100{
willSet{
print("a의 값이 \(a)에서 \(newValue)로 변경될 예정입니다.")
}
didSet{
print("a의 값이 \(oldValue)에서 \(a)로 변경되었습니다.")
}
}
a = 200