Language/Swift

swift property observer

jaewpark 2022. 8. 23. 16:04

특정 프로퍼티의 값이 변경되면 반응을 하는 구문입니다.

 

  • willSet : 프로퍼티의 값이 변경되기 직전에 호출되는 옵저버
  • didSet : 프로퍼티의 값이 변경된 직후에 호출되는 옵저버

 

var <프로퍼티명> : <타입> [ = <초기값> ] {
  willSet [ (<인자명>) ] {
    <프로퍼티 값이 변경되지 전에 실행할 내용>
  }
}
var <프로퍼티명> : <타입> [ = <초기값> ] {
  didSet [ (<인자명>) ] {
    <프로퍼티 값이 변경된 후에 실행할 내용>
  }
}
대괄호의 경우에는 생략을 해도 됩니다.

 

struct Job {
    var income: Int = 0 {
        willSet {
            if income == 0 {
                print("월급이 \(newValue)로 책정이 되었습니다")
            } else {
                print("월급이 \(income)에서 \(newValue)으로 변경되었습니다")
            }
        }
        didSet {
            if income > oldValue {
                if oldValue != 0 {
                    print("월급이 \(income - oldValue)만큼 인상되었습니다.")
                }
            } else if income < oldValue {
                print("월급이 \(oldValue - income)만큼 삭감되었습니다.")
            }
        }
    }
}

var job = Job()
job.income = 1000000
print("3개월 후")
job.income = 1500000

/* result is
* 월급이 1000000로 책정이 되었습니다
* 3개월 후
* 월급이 1000000에서 1500000으로 변경되었습니다
* 월급이 500000만큼 인상되었습니다.
*/
didSet에서 사용하는 oldValue와 willSet에서 사용하는 newValue 는 시스템에서 만들어서 제공하는 상수입니다.