[RxSwift] Traits 1편: Control Property/Control Event

Lily·2022년 7월 10일
0

rxSwift🏃🏻‍♀️

목록 보기
6/6

https://github.com/ReactiveX/RxSwift/blob/main/Documentation/Traits.md

Traits


RxSwift의 Observable에 contextual meaning을 제공 + 특정 usecase에서 활용되도록 구현한 문법적 슈가.
문법적 슈가이므로 Trait대신 Observable을 사용해도 아무 문제 없다.

Observable이 광범위하게 사용된다면, Trait은 특정 상황에서만 사용되는 Observable이다.
오늘 살펴볼 ContorlPropertyContorlEvent는 UI라는 특정 상황에서만 사용된돠

어떻게 작동할까?

Trait은 Observable 시퀀스를 프로퍼티로 가지는 Wrapper 구조체이다.

struct Single<Element> {
    let source: Observable<Element>
}

struct Driver<Element> {
    let source: Observable<Element>
}
...

Trait에서 .asObservable()을 호출하면 다시 원본 Observable로 변환해준다.


Control Property, Control Event는 모두 rxCocoa에 구현되어 있는 Trait이다.

Control Property

UI element의 property를 나타내는 Observable

Control Property는 최초의 UI value사용자가 트리거한 UI value change를 next로 받는다. 코드로 조작한 value change는 감지하지 못한다.

  • share(replay: 1) 로 작동
  • controlProperty 가 메모리 해제될 때 complete된다
  • error를 절대 내보내지 않는다
  • 이벤트를 MainScheduler.instance로 보낸다.
  • 시퀀스의 이벤트가 메인 스케줄러에서 구독되는 것을 보장한다. (subscribeOn(ConcurrentMainScheduler.instance) behavior)

Control Event

UI element의 event를 나타내는 Observable

  • 절대 실패하지 않는다
  • 구독시 어떠한 초기 값도 이벤트로 전달하지 않음
  • controlEvent 가 메모리 해제될 때 complete된다
  • error를 절대 내보내지 않는다
  • 이벤트를 MainScheduler.instance로 보낸다.
  • 시퀀스의 이벤트가 메인 스케줄러에서 구독되는 것을 보장한다. (subscribeOn(ConcurrentMainScheduler.instance) behavior)
profile
i🍎S 개발을 합니다

0개의 댓글