- 기존 Cocoa Framework와 UIKit Framework에 Rx기능을 합친 RxSwift기반의 라이브러리이다.
- RxSwift와 별도로 추가해주어야 사용할 수 있다.
- 단방향성을 갖고 있다.
- Producer는 값을 생성하고, Consumer는 값을 처리한다.
💡 bind(to:)란?
: Subscribe()의 별칭으로, 호출 시 실제로는 Subscribe(Observer)가 실행된다.
- ObserverType: 값을 주입시킬 수 있는 타입이다.
- ObservableType: 값을 관찰할 수 있는 타입이다.
- Subject와 같이 프로퍼티에 새 값을 주입시킬 수 있고(ObserverType) 값의 변화도 관찰할 수 있는(ObservableType) 타입이다.
- ControlProperty는 ControlPropertyType을 준수하고, ControlPropertyType은 ObserverType과 ObservableType을 준수한다.
/// Protocol that enables extension of `ControlProperty`.
public protocol ControlPropertyType : ObservableType, ObserverType {
/// - returns: `ControlProperty` interface
func asControlProperty() -> ControlProperty<Element>
}
- ObserverType을 따른다. (값을 주입시킬수는 있지만, 값을 관찰할 수는 없다.)
- Error를 값으로 받을 수 없으며, Error가 주입되면 debug모드에서 FatalError를 발생시킨다.
ex) button의 text는 Subscribe할 수 없지만, Bind 할 수 있다.
- UI 작업시 코드를 쉽고 직관적으로 작성해 사용할 수 있도록 도와주는 특별한 Observable 클래스의 모음이다.
- Error를 방출하지 않는다.
- Main Scheduler에서 Observe 된다.
- Main Scheduler에서 Subscribe 된다.
- Signal을 제외한 나머지 Trait은 자원을 공유한다.
- ControlProperty: Control에 data를 binding하기 위해 사용한다.
- ControlEvent: Control의 event를 수신하기 위해 사용한다.
- Driver: Error를 방출하지 않고 Main Thread에서 처리된다.
- Signal: Driver와 대부분 동일하지만, 한가지 다른 점은 자원을 공유하지 않는다는 점이다. (새로운 Subscriber에게 마지막 element를 전달하지 않는다.)
💡 Driver는 state모델링, Signal은 event모델링에 더 적합하다.
- RxCocoa 라이브러리를 추가 시에 사용 가능하다.
- RxSwift에서만 구현되어 있는 개념이다.
- 주로 UI 작업을 위해서 사용된다. (UI 처리에 특화된 Observable: Traits)
- Main Thread에서 작업하고 싶을 때, Observable 대신 사용된다.
let relay = BehaviorRelay<Int>(value:0)
let driver = relay.asDriver()