Binder
RxCocoa Binding을 사용하면 다음과 같이 값의 변화에 따라 화면의 일부 View에 쉽게 Binding 할 수 있습니다.
위에 그림 예제는
ViewModel(myObservable View의 속성을 가지는 Observable) 과 View(myLabel의 Text)는 Databinding 을 사용하여 View의 변화를 주고 있습니다.
왜 Binder를 사용할까요?
MVVM 의 DataBinding 을 구현하기 위해서는 Binder 가 필요하기 때문입니다.
위에 예제에서는 `text` 의 sink 를 통해서 UILabel의 text를 업데이트 할 수 있습니다.
Stream의 용어에서는 Source, Sink 두 용어가 있습니다.
Source: 원본 즉 이벤트 발생 개념
Sink: 목적지의 개념
* `Binder`는 대상을 유지하지 않으며 대상이 해제 된 경우 요소가 Binding되지 않습니다.
* 기본적으로는 메인 스케쥴러에서 Binding 됩니다.
인터페이스 바인딩 규칙:
1. Error 는 Binding 할 수 없습니다.
- (Debug 에서는 FatalError가 발생, Release 는 Log 로 출력됨)
2. 특정 스케줄러에서 바인딩이 수행되도록 합니다.
ControlEvent
가장 기본적인 예제로 시작하도록 하겠습니다.
위에 예제는 UIButton의 tap 이벤트가 클릭되었을 때 ViewModel의 controlTap 의 이벤트로 DataBinding 하는 과정입니다.
UIButton.rx.tap 내부 코드
`touchUpInside` 이벤트를 `tap`이라는 이름으로 Wrapping 하고 있는 것을 알 수 있습니다.
touchUpInside 는 어디서 나온 것 일까요?
https://developer.apple.com/documentation/uikit/uicontrol/event
UIControl.Event - UIControl | Apple Developer Documentation
A touch dragging or otherwise manipulating a control, causing it to emit a series of different values.
developer.apple.com
UIControl
UIControl은 Target-Action 메커니즘을 사용하여 사용자 상호 작용을 앱에 보고합니다.
우리가 흔히 쓰는 addTarget(_:action:for:) 은 Target-Action 메커니즘이며 UIControl 과 앱의 상호작용을 연결합니다.
UI 이벤트를 나타내는 Observable/ ObservableType 특징
1. 절대 실패하지 않음.
2. subscribe 시 초기값을 보내지 않음
3. Control 이 해제될 때는 Complete 이벤트를 보냄
4. Error 를 방출하지 않음
전체 코드는 여기에서 확인할 수 있습니다.
소중한 시간 내어서 소중한 시간 내주셔서 감사합니다
'iOS' 카테고리의 다른 글
[번외편][이론] iOS 사용성 최대로 올려보자! UICollectionView Custom Layout (0) | 2019.09.09 |
---|---|
왜 MVVM 을 사용할까요? (0) | 2019.09.03 |
iOS 사용성 최대로 올려보자! (Final) - UIViewController Interactive Transition (0) | 2019.08.20 |
iOS 사용성 최대로 올려보자! (Part5) - Easing function (1) | 2019.08.19 |
iOS 사용성 최대로 올려보자! (Part3) - UIView Interactive Animation (1) | 2019.08.19 |