자신이 정의한 저장 프로퍼티에 추가할 수 있으며, super class(부모 클래스)를 상속한 프로퍼티ㅣ에도 추가할 수 있다
🔥 프로퍼티 값의 변화를 관찰하고 이에 응답한다cf) 새로운 값이 프로퍼티의 현재 값과 동일하다고 하더라도 속성의 값이 설정될 때 마다 호출된다
즉, 저장프로퍼티와 연산 프로퍼티를 감시하는데 사용한다
새로운 프로퍼티의 값이 상수 매개변수(constant parameter)로 전달된다
willSet 구현의 일부로 이 매개변수의 이름을 지정할 수 있다
구현 내의 매개변수 이름과 괄호를 쓰지 않으면 newValue라는 기본 매개변수 이름을 사용하여 이 매개변수를 사용할 수 있다
이전 프로퍼티 값을 포함하는 상수 매개변수(constant parameter)가 전달된다
매개변수의 이름을 지정하거나, oldValue라는 개본 매개변수 이름을 사용할 수 있다
자체적으로 설정한 옵저버 내에서 프로퍼티에 값을 할당하면, 할당한 새 값이 방금 설정한 값으로 변경된다
class SetAge {
//myAge는 저장 프로퍼티이다
var myAge = 0 {
willSet { //WillSet은 값이 지정되기 직전에 호출되고 파라미터로의 이름을 정의해주지 않았으므로 newValue라는 이름을 사용한다
print("값이 설정될 예정이다. myAge: \(newValue)") //newValue는 새로설정될 값이 들어간다
}
didSet { //값이 설정된 후에 탄다 파라미터의 이름을 정의해주지 않았으므로 oldValue로 값설정 전의 값을 불러올 수 있다
print("값이 oldValue: \(oldValue)에서 myAge: \(myAge)로 설정될 예정이다") //oldValue는 0이다
}
myAge = 10
}
//willSet과 didSet에서 파라미터의 이름을 넣어줄 경우
class SetAge {
//myAge는 저장 프로퍼티이다
var myAge = 0 {
willSet(newAge) {
print("값이 설정될 예정이다. myAge: \(newAge)") //newAge = 10
}
didSet(oldAge) {
print("값이 oldValue: \(oldAge)에서 myAge: \(myAge)로 설정될 예정이다") //oldAge = 0, myAge = 10
}
myAge = 10
}
즉! 원래는 저장 프로퍼티에만 프로퍼티 옵저를 추가할 수 있으며, 부모클래스를 상속하는 하위 클래스의 프로퍼티는 저장프로퍼티든, 연산프로퍼티든 프로퍼티 옵저버를 추가할 수 있다