[RxSwift] RxCocoa

jinny·2022년 10월 18일
0

RxSwift

목록 보기
9/10
post-thumbnail

RxCocoa


📚 개념

  • 기존 Cocoa Framework와 UIKit Framework에 Rx기능을 합친 RxSwift기반의 라이브러리이다.
  • RxSwift와 별도로 추가해주어야 사용할 수 있다.
  • 단방향성을 갖고 있다.
  • Producer는 값을 생성하고, Consumer는 값을 처리한다.

💡 bind(to:)란?
: Subscribe()의 별칭으로, 호출 시 실제로는 Subscribe(Observer)가 실행된다.



📚 ObserverType, ObservalbeType

  • ObserverType: 값을 주입시킬 수 있는 타입이다.
  • ObservableType: 값을 관찰할 수 있는 타입이다.

📖 ControlProperty

  • 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>
}

📖 Binder

  • ObserverType을 따른다. (값을 주입시킬수는 있지만, 값을 관찰할 수는 없다.)
  • Error를 값으로 받을 수 없으며, Error가 주입되면 debug모드에서 FatalError를 발생시킨다.
ex) button의 text는 Subscribe할 수 없지만, Bind 할 수 있다.



📚 Trait

  • UI 작업시 코드를 쉽고 직관적으로 작성해 사용할 수 있도록 도와주는 특별한 Observable 클래스의 모음이다.

📖 규칙

  • Error를 방출하지 않는다.
  • Main Scheduler에서 Observe 된다.
  • Main Scheduler에서 Subscribe 된다.
  • Signal을 제외한 나머지 Trait은 자원을 공유한다.

📖 RxCocoa의 Traits

  • ControlProperty: Control에 data를 binding하기 위해 사용한다.
  • ControlEvent: Control의 event를 수신하기 위해 사용한다.
  • Driver: Error를 방출하지 않고 Main Thread에서 처리된다.
  • Signal: Driver와 대부분 동일하지만, 한가지 다른 점은 자원을 공유하지 않는다는 점이다. (새로운 Subscriber에게 마지막 element를 전달하지 않는다.)

💡 Driverstate모델링, Signalevent모델링에 더 적합하다.


📖 Driver

  • RxCocoa 라이브러리를 추가 시에 사용 가능하다.
  • RxSwift에서만 구현되어 있는 개념이다.
  • 주로 UI 작업을 위해서 사용된다. (UI 처리에 특화된 Observable: Traits)
  • Main Thread에서 작업하고 싶을 때, Observable 대신 사용된다.

✏️ 예시) Relay 관찰할 때, Observable 대신 Driver의 형태로 관찰

let relay = BehaviorRelay<Int>(value:0)
let driver = relay.asDriver()



🏷 참고 사이트

profile
우당탕탕 지니

0개의 댓글