RxSwift疑問


めちゃめちゃメモ

map と flatMap 違い

map

流れて来る本来のイベントの値を加工

flatMap

流れて来る本来のイベントの値を加工した上で、任意のObservabl型を返す関数

bind

ObservableとObservableをくっつける
Errorをスルー

.of(), .just()

どっちもObservableを簡単に生成するメソッド。
createでもいい。
justは1個、ofは複数可能。

just

justは引数で渡した値1つをただ返すだけのObservableを作成するメソッド

of

ofは引数で渡した値全部をただ返すだけのObservableを作成するメソッド

ライフサイクル

Hot Cold

Hot

acceptで発火
SubjectはHot
1対多

Cold

subscribeすると発火
一旦、Subject以外は基本Coldと思っていい
1対1(複数Subscribeできるけど別々のStreamになる)

Scheduler

observeOn

次の処理を引数のスレッドで実行

subscribeOn

前の処理を引数のスレッドで実行
Coldでしか使えないよ

Driver

Driverを使用することで購読する側に

  • メインスレッドで通知
  • shareReplayLatestWhileConnected を使った Cold-Hot 変換
  • onError 通知しない

を強制することができます。

参考:https://qiita.com/k5n/items/44ef2ab400f47fb66731

bind と subscribeの違い

subscribeの便利なやつがbind。
onNextしかない。ErrorもCompletedもない

Observableをnilでフィルタしてアンラップするときどうしたらいい?

filterNil() みたいなExtension追加しよ

extension ObservableType where Element: OptionalType {

  func filterNil() -> Observable<Element.Wrapped> {
    return flatMap { item -> Observable<Element.Wrapped> in
      if let value = item.value {
        return .just(value)
      } else {
        return .empty()
      }
    }
  }
}

参考:https://qiita.com/ryotapoi/items/925a74ed4df9cb351c32