본문 링크 (Original Link)

[RxSwift] Tips

2018.06.26

#

by RxSwift, translated by pilgwon

예를 들어 보겠습니다.

extension ObservableType where E: MaybeCool {

    @warn_unused_result(message="http://git.io/rxs.uo")
    public func coolElements()
        -> Observable<E> {
          return filter { e -> Bool in
              return e.isCool
          }
    }
}

절대로 구독을 무슨 수를 써서라도 중첩하지 마세요. 그 코드에선 분명 냄새가 날 것입니다.

textField.rx.text.subscribe(onNext: { text in
    performURLRequest(text).subscribe(onNext: { result in
        ...
    })
    .addDisposableTo(disposeBag)
})
.addDisposableTo(disposeBag)

다음은 연산자를 사용해서 disposable을 연쇄로 사용하도록 추천되는 방법입니다.

textField.rx.text
  .flatMapLatest { text in
    // 이것이 실패하지 않고 메인 스케쥴러에 결과를 반환한다고 가정하세요.
    // 그렇지 않은 경우엔 `catchError`와 `observeOn(MainScheduler.instance)`가 필요할 것입니다.
    return performURLRequest(text)
  }
  ...
  .addDisposableTo(disposeBag) // 가장 많이 쓰이는 disposable 입니다