Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 함수
- 30개프로젝트로배우는iOS앱개발withSwift초격자패키지Online
- enum
- swift
- 직장인인강
- Background
- 옵셔널 체이닝
- 인스펙터
- RawValue
- 패캠챌린지
- cancelAsyncWrite
- 열거형
- Threading
- 기본문법
- 직장인자기계발
- ios
- userDefaults
- SeSAC
- 패스트캠퍼스
- Realm
- Optional Chaining
- 패스트캠퍼스후기
- beginAsyncWrite
- TableView
- 프로퍼티 관찰자
- switch
- Git
- 문자열 보간법
- 독학
- xcode
Archives
- Today
- Total
아삭아삭 iOS 개발
[Swift 독학] 패스트캠퍼스 챌린지 23일차_프로퍼티 관찰자 본문
■ 프로퍼티 관찰자(property observers)
- 프로퍼티의 값이 변경될 때 사용자가 지정하는 동작에 응답 가능
- 변경하려는 프로퍼티의 새로운 값이 기존값과 같아도 프로퍼티가 설정(set)될 때 프로퍼티 옵저버는 호출됨
- 프로퍼티 관찰자를 추가할 수 있는 위치 3곳
1) 저장 프로퍼티
2) 오버라이딩이 된(=상속한) 저장 프로퍼티
3) 오버라이딩이 된(=상속한) 연산 프로퍼티 - 상속된 프로퍼티의 경우(2,3번) 하위 클래스의 프로퍼티를 재정의하여 프로퍼티 관찰자를 추가
- 연산 프로퍼티의 경우, (관찰자를 생성하는 대신) 프로퍼티의 setter를 이용하여 값 변경을 관찰하고 응답
- 함수/메서드/클로저/타입 등의 외부에 있는 지역 및 전역 변수에도 모두 사용 가능
■ 프로퍼티 관찰자 정의방법 2가지
1) willSet 옵저버
- 값이 저장되기 직전에 호출됨
- 새로 저장될 프로퍼티의 값을 상수 매개변수로 전달
- wiliest 블럭에서 암시적 매개변수 new value 사용 가능
2) didSet 옵저버
- 값이 저장되기 직후에 호출됨
- 프로퍼티의 기존 값이 상수 매개변수로 전달
- didst 블럭에서 암시적 매개변수 old value 사용 가능
※ willSet과 didSet 2개 모두 정의 가능
※ willSet과 didSet 둘 중 필요한 하나만 구현해 주어도 무관
오늘 공부하면서 작성해본 예시 코드로는 환율 관련한 프로퍼티 옵저버를 생성해보았다.
작년에 읽은 책 중 「나는 주식 대신 달러를 산다」 라는 책을 인상깊게 읽었던 점이 기억나서인데,
시시각각 환율 변동 상황을 알려주는 기능이 있으면 좋을 것 같다는 생각에 간단하게 작성해보았다.
(그러고보니 이 책 마지막에 작가분이 직접 관련앱 출시도 할 예정이라고 적혀있던데, 한 번 찾아보고 그 앱은 어떤 식으로 만들어졌는지 살펴보는 것도 좋은 공부가 될 것 같다.)
class WonDollarExchangeRate {
var todayExchangeRate: Double = 0 {
// 데이터 타입을 처음에 Int로 했다가, 소수점 둘째 자리까지의 환율값을 할당해야 하므로 데이터 타입을 Double로 변경함
willSet (newExchangeRate){
print("오늘의 원달러 환율은 \(newExchangeRate)원입니다.")
}
didSet {
if todayExchangeRate > oldValue {
print("오늘의 원달러 환율은 어제보다 \(todayExchangeRate - oldValue) 원 상승했습니다.")
} else if todayExchangeRate == oldValue {
print("오늘의 원달러 환율은 어제와 동일한 \(oldValue) 원입니다.")
} else {
print("오늘의 원달러 환율은 어제보다 \(oldValue - todayExchangeRate) 원 하락했습니다.")
}
}
}
}
let kdExchangeRateAlarm = WonDollarExchangeRate()
kdExchangeRateAlarm.todayExchangeRate = 1194.59
//오늘의 원달러 환율은 1194.59원입니다.
//오늘의 원달러 환율은 어제보다 1194.59 원 상승했습니다.
kdExchangeRateAlarm.todayExchangeRate = 1199.74
//오늘의 원달러 환율은 1199.74원입니다.
// 오늘의 원달러 환율은 어제보다 5.150000000000091 원 상승했습니다.
-> 여러번 돌려도 1199.74-1194.59=5.150000000000091 이 나옴. 진짜 이상함ㅋㅋㅋㅋㅋ 0.000000000000091의 정체를 찾아보아야겠음
kdExchangeRateAlarm.todayExchangeRate = 1194.49
//오늘의 원달러 환율은 1194.49원입니다.
//오늘의 원달러 환율은 어제보다 5.25 원 하락했습니다.
본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.
■ fast campus강의 외 참조자료
[1] https://blog.yagom.net/556/
[2] https://bbiguduk.gitbook.io/swift/language-guide-1/properties#property-observers
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'Swift' 카테고리의 다른 글
[Swift 독학] 패스트캠퍼스 챌린지 25일차_상속 (0) | 2022.02.17 |
---|---|
[Swift 독학] 패스트캠퍼스 챌린지 24일차_프로퍼티 래퍼 (0) | 2022.02.16 |
[Swift 독학] 패스트캠퍼스 챌린지 22일차_프로퍼티_연산, 타입 프로퍼티 (0) | 2022.02.14 |
[Swift 독학] 패스트캠퍼스 챌린지 21일차_프로퍼티_저장 프로퍼티 (0) | 2022.02.13 |
[Swift 독학] 패스트캠퍼스 챌린지 20일차_구조체와 클래스 비교 (0) | 2022.02.12 |