Property Observer

Swift에서는 Property에 대하여 Observer를 손쉽게 활용할 수 있다.
Property Observer의 종류는 다음과 같다.

  • willSet: 해당 property가 새로운 값으로 변경되기 직전에 호출
  • didSet: 해당 property가 새로운 값으로 변경되고 난 후 호출

이러한  특징을 잘 활용하면 Rx의 그것과 같은 Property value의 Observing을 보다 쉽게 구현할 수 있다.
기본적인 사용법은 아래와 같다.

var number = 1 {
    willSet(newValue) {
        print(newValue)
        numberValueWillChange(newValue: newValue, currentValue: number)
    }
    
    didSet(oldValue) {
        print(oldValue)
        numberValueChanged(prevValue: oldValue, newValue: number)
    }
}

number = 3

func numberValueWillChange(newValue: Int, currentValue: Int) {
    print("newValue: \(newValue), currentValue: \(currentValue)")
}

func numberValueChanged(prevValue: Int, newValue: Int) {
    print("prevValue: \(prevValue), newValue: \(newValue)")
}

위 예제 코드와 같이 사용할 수 있으며, 코드에서 나타나듯이 Property Observer를 사용할 때 클래스 내 다른 함수의 호출도 또한 가능하다.

이를 사용할 때 주의해야 할 부분으로는, Observing할 Property는 반드시 초기화가 되어 있어야만 하고, init이 호출될 때에는 Observer 내에 작성한 코드는 동작하지 않는다.
즉, 초기화 될 때는 예제에서 작성한 print와 numberValue~ 의 함수가 호출되지 않는다.
이는 위 코드를 Playground를 통해 실행시켜보면 더욱 명확해지는데, 아래와 같은 출력을 얻을 것이다.

3
newValue: 3, currentValue: 1
1
prevValue: 1, newValue: 3

예제 코드의 출력을 보면, number의 초기화 시에는 willSet, didSet모두 동작하지 않는 것을 확인할 수 있다.

댓글 남기기