-
(Swift) Property - didSet, willSet이란Programing Language/Swift 2019. 11. 5. 14:42728x90반응형
스위프트는 프로퍼티 옵저버로 didSet, willSet을 제공합니다.
didSet은 프로퍼티 값이 변경되기 직전, willSet은 값이 변경된 직후를 감지하는 것입니다. 따라서, 이 때 원하는 작업을 수행할 수 있습니다.
참고로 프로퍼티 옵저버를 사용하기 위해서는 프로퍼티의 값이 반드시 초기화가 되어 있어야 합니다.
또한 클래스의 init()안에서 값을 할당할 때는 didSet, willSet이 호출되지 않습니다. (초기화 이후부터 프로퍼티를 감시)
# didSet, willSet의 활용
프로퍼티 옵저버의 가장 빈번한 사용은 Model에서 갱신된 값을 View에 보여줄 때 입니다.
예를 들면, View에 점수를 표시하는 Label이 있다고 가정하고, 점수가 바뀔 때 마다 View의 Label을 업데이트하고 싶습니다.
이 경우에 점수를 저장하고 있는 변수인 score의 값을 바꾸어주고 화면을 갱신하는 작업을 아래처럼 할 수 있습니다.
score = 90 scoreLabel.text = "\(score)"
이렇게 해도 View의 Label은 정상적으로 바뀌지만, 여러 곳에서 score의 값을 바꾼다면 score의 값이 바뀌는 곳 마다 2번 라인의 코드를 적어야하는 번거로움이 있습니다.
이럴 때 프로퍼티 옵저버를 사용할 수 있습니다. 프로퍼티 옵저버를 사용하면 아래와 같이.
var score: Int = 0 { didSet { scoreLabel.text = "\(score)" } }
이렇게 하면 score값이 바뀔 때 마다 View의 값을 갱신하는 작업을 따로 해줄 필요가 없습니다. 이외에도 프로퍼티 옵저버를 사용하여 현재 값과 바뀔 값을 비교하는 작업을 할 수도 있습니다.
var score: Int = 0 { didSet(oldVal) { print("현재 점수는 : \(self.score), 이전 점수는: \(oldVal)") } }
(willSet도 비슷하게 활용할 수 있습니다.)
728x90반응형'Programing Language > Swift' 카테고리의 다른 글
Swift) Swift의 map이라는 개념 (0) 2020.03.20 Swift ) 소수점 제거 함수 삼총사 ceil(), floor(), round()[펌] (0) 2020.02.14 (Swift)인스턴스 생성 / 소멸 (init / deinit) (0) 2019.11.05 (Swift) assert / guard에 대해서 (0) 2019.10.28 (Swift) lazy 변수형 사용 방법 (0) 2019.10.25