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 |
Tags
- MVVM
- Clean Code
- 클린 코드
- Refactoring
- Observable
- uiscrollview
- 애니메이션
- 스위프트
- Xcode
- 리펙토링
- RxCocoa
- collectionview
- Protocol
- combine
- ribs
- HIG
- tableView
- UICollectionView
- uitableview
- map
- UITextView
- clean architecture
- rxswift
- ios
- swiftUI
- 리펙터링
- 리팩토링
- swift documentation
- Human interface guide
- SWIFT
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] KVO(Key-Value Observing) 본문
KVO(Key-Value Observing)
- 특정 키의 값의 변화를 감지하기 위한 기능
- `변수`에 코드를 붙여 변수가 변경될 때마다 코드가 실행되도록 하는 방법
- Property Observers(willSet, didSet)과 유사하지만 KVO는 타입 정의 밖에서 observe를 추가한다는 점의 차이가 존재
(Objective-c 런타임에 의존하기 있기 때문) - 사용할 땐 NSObject를 상속받기 위해 @objc dynamic를 반드시 붙여줘야 가능
(dynamic 키워드: Objsective-c 문법의 하나로, 특정 method의 구현을 objective-런타임에서 dynamic dispatch를 활성화 - Dynamic dispatch: 키 패스(KeyPath = \.) 이름을 이용해 프로퍼티의 주소를 찾게 하는 기능)
키 패스 (KeyPath)
- 프로퍼티나 메소드등을 특정문자열로 표기하는 규칙
("value"라는 문자열을 넘겨주면 특정 클래스 오브젝트의 value라는 프로퍼티를 의미하는 것)
KVO 사용 방법
- KVO기능은 NSObject에 지정되어 있기 때문에 NSObject를 상속받은 클래스에만 적용가능
- 참고로, NSObject라는 무거운 것을 상속받아야 하므로 swift에서는 KVO를 쓰지 않는것이 좋음
class MyClass: NSObject {
@objc dynamic var testStr: String = "init--"
}
- observe()함수 호출하여 이벤트 구독
myClass.observe(\.testStr, options: [.new, .old]) { (object, chnage) in
print("change event old => \(chnage.oldValue ?? "")")
print("change event new => \(chnage.newValue ?? "")")
}
- 값 대입 시 이벤트 발생
self.myClass.testStr = "test1"
self.myClass.testStr = "test2"
'iOS 기본 (swift)' 카테고리의 다른 글
[iOS - swift] switch문 CaseIterable, allCases (0) | 2021.03.14 |
---|---|
[iOS - swift] TimeZone 지역 값 (0) | 2021.03.08 |
[iOS - swift] for, stride, Range (0) | 2021.03.03 |
[iOS - swift] 고차함수map(map, flatMap, compactMap), filter, reduce (0) | 2021.02.28 |
[iOS - swift] Result 타입 (성공, 실패) (0) | 2021.02.26 |
Comments