# didSet, willSet in Swift
스위프트는 프로퍼티 옵저버로 didSet, willSet을 제공합니다.
didSet은 프로퍼티 값이 변경되기 직전, willSet은 값이 변경된 직후를 감지하는 것입니다. 따라서, 이 때 원하는 작업을 수행할 수 있습니다.
참고로 프로퍼티 옵저버를 사용하기 위해서는 프로퍼티의 값이 반드시 초기화가 되어 있어야 합니다.
또한 클래스의 init()안에서 값을 할당할 때는 didSet, willSet이 호출되지 않습니다. (초기화 이후부터 프로퍼티를 감시)
# didSet, willSet의 활용
프로퍼티 옵저버의 가장 빈번한 사용은 Model에서 갱신된 값을 View에 보여줄 때 입니다.
예를 들면, View에 점수를 표시하는 Label이 있다고 가정하고, 점수가 바뀔 때 마다 View의 Label을 업데이트하고 싶습니다.
이 경우에 점수를 저장하고 있는 변수인 score의 값을 바꾸어주고 화면을 갱신하는 작업을 아래처럼 할 수 있습니다.
1 2 | score = 90 scoreLabel.text = "\(score)" | cs |
이렇게 해도 View의 Label은 정상적으로 바뀌지만, 여러 곳에서 score의 값을 바꾼다면 score의 값이 바뀌는 곳 마다 2번 라인의 코드를 적어야하는 번거로움이 있습니다.
이럴 때 프로퍼티 옵저버를 사용할 수 있습니다. 프로퍼티 옵저버를 사용하면 아래와 같이.
1 2 3 4 5 | var score: Int = 0 { didSet { scoreLabel.text = "\(score)" } } | cs |
이렇게 하면 score값이 바뀔 때 마다 View의 값을 갱신하는 작업을 따로 해줄 필요가 없습니다. 이외에도 프로퍼티 옵저버를 사용하여 현재 값과 바뀔 값을 비교하는 작업을 할 수도 있습니다.
1 2 3 4 5 | var score: Int = 0 { didSet(oldVal) { print("현재 점수는 : \(self.score), 이전 점수는: \(oldVal)") } } | cs |
(willSet도 비슷하게 활용할 수 있습니다.)
참고 URL
https://medium.com/ios-development-with-swift/%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0-get-set-didset-willset-in-ios-a8f2d4da5514
'Swift' 카테고리의 다른 글
[Swift] 노티피케이션 센터와 노티피케이션 (0) | 2018.09.16 |
---|---|
[Swift] DispatchQueue란? (0) | 2018.09.14 |
[Swift] 프로토콜(Protocol)이란 (0) | 2018.05.04 |
[Swift] 클래스 vs 구조체,열거형 (3) | 2018.05.04 |
[Swift] guard vs if (3) | 2018.04.27 |