오늘은 속성 감시자에 대해 정리하려고 합니다.
속성 감시자는 저장 속성이 변하는 시점을 관찰합니다.
저장 속성이 변하는 순간, 구현되어 있는 메서드가 호출됩니다.
1) willSet은 값이 저장되기 직전에 호출됩니다.
2) didSet은 새 값이 저장된 직후에 호출됩니다.
class Apple {
// 일반 저장 속성
var message: String = "가격이 변경 되었습니다."
// 속성 감시자
var price: Int {
willSet(price) { // 바뀔 값이 파라미터로 전달
print("사과의 가격이 \(self.price)원에서 \(price)원으로 변경될 예정입니다.")
print("가격 변경전")
}
didSet(price) { // 바뀌기 전의 과거값이 파라미터로 전달
print("사과의 가격이 \(price)원에서 \(self.price)원으로 이미 변경되었습니다.")
print("가격 변경후")
}
}
init(price: Int) {
self.price = price
}
}
let apple = Apple(price: 3000)
apple.price
apple.price = 5000
/* 실행결과 */
//사과의 가격이 3000원에서 5000원으로 변경될 예정입니다.
//가격 변경전
//사과의 가격이 3000원에서 5000원으로 이미 변경되었습니다.
//가격 변경후
- 클래스, 구조체, (열거형) 동일하게 적용
- 어떤 속성이 변하는 시점을 알아차리도록 시점에 제약을 만드는 코드를 짜기는 어려움
- 그래서 실제 서비스에 활용할때 좋은 수단
- 일반적으로는 willSet 또는 didSet 중에서 한가지만 구현
- 실제 프로젝트에서는 didSet을 많이 사용
'iOS > Swift' 카테고리의 다른 글
| [Swift] guard와 if-let 비교해보기 (0) | 2022.12.07 |
|---|---|
| [Swift] 서브스크립트 (Subscripts) (0) | 2022.11.25 |
| [Swift] 클래스와 구조체 (Class, Struct) (0) | 2022.11.22 |
| [Swift] Optional (0) | 2022.11.17 |
| [Swift] Array (0) | 2022.11.16 |