01. didSet
- 프로퍼티 값이 저장(변경)된 직후에 호출
- 이전 프로퍼티의 값이 기본 매개변수 이름인 'oldValue' 로 제공
02. willSet
- 프로퍼티 값이 저장(변경)되기 직전에 호출
- 새로운 프로퍼티의 값이 기본 매개변수 이름인 'newValue' 로 제공
var exampleProperty: Int = 0 {
willSet(newExampleValue) {
print("값이 \(exampleProperty)에서 \(newExampleValue)로 변경될 예정입니다.")
}
didSet {
print("값이 \(oldValue)에서 \(exampleProperty)로 변경되었습니다.")
}
}
exampleProperty = 10
코드 설명
1. exampleProperty = 10을 실행하면 먼저 willSet이 호출됨
2. willSet 블록 내 print 문이 출력됨
3. 그런 다음에 프로퍼티 값이 실제로 변경됨
exampleProperty = 0 → 10
4. 값이 변경된 후 didset 호출
* 해당 시점에서 oldValue 는 이전 값인 0이 됨
* 변경된 값인 10은 exampleProperty 에 담김
* didSet 블록 내 print 문이 아래와 같이 출력됨
질문사항 - 튜터님께 물어보고 질문하고 내용 남기기
1. 프로퍼티 옵저버는 반드시 프로퍼티 아래에 위치하는 건지 하는 지 궁금합니다
-마지막 프로퍼티 바로 아래에 붙어야 하는지?
: 맞다. 프로퍼티 범위 안에 속해야 한다
연산 프로퍼티처럼 Int 프로퍼티 내 속해있는 것으로 이해해야함(프로그래밍 약속)
2. 동일한 예제에서 didSet 매개변수명이 생략 되었는데, 생략한 이유가 뭔지 궁금합니다
찾아 보았을 때 매개변수명을 지정하지 않으면 기본 이름인 'oldValue'로 제공된다고 했는데 생략한 것이랑 어떤 차이가 있는지 궁금합니다
3. 스파르타 심화 강의(1강) 자료에서 예시코드 내용 중 빨간색 부분과 노란색 부분 매개변수명이 다른데 이게 어떤 의미인지 궁금합니다 ㅠㅠ! (두개가 같은 게 아닌가요??)
: (2-3 공동답변) 두 가지 표현 방법이 있는 것이다
- 매개변수명 지정해서 표기
didSet(oldVal)
willSet(newVal)
- 또는 생략하여 기본 프로퍼티명 oldValue/newValue 표기
didSet {
print ("~~~~~~~ \(oldValue)")
'🍎 Swift > iOS 문법 노트' 카테고리의 다른 글
[🍎 Swift 문법] if let & guard let (0) | 2024.06.27 |
---|---|
[🍎 Swift 문법] 타입 캐스팅 (0) | 2024.06.25 |
[🍎 Swift 문법] 클래스와 인스턴스 (0) | 2024.06.07 |
[🍎 Swift 문법] 옵셔널(더 찾아보고 추가하기) (0) | 2024.06.05 |
[🍎 Swift 문법] 매개변수(Parameter) & 전달인자(Argument) & 전달인자 레이블(Argument Label) (0) | 2024.06.04 |