Overview of RxSwift
RxSwift
View Slide
Rx(Reactive X)とはObserverパターンIteratorパターン関数型プログラミングを実装している拡張ライブラリ
RxSwiftのメリット値の変化を検知できる⾮同期の処理を簡潔に書ける宣⾔的記述MVVMの実装が楽になる
何ができる?何でもできる。
ObservableObservableは観測対象。Observableは Observerに通知を送ることができる。ObserverObserverは観測者。Observerは Observableからの通知に反応することができる。
EventObservableが通知する内容。3種類あるonNext値を流すonCompleteイベントの終了onErrorエラー発⽣時
subscribeObserverが Observableを観測すること。subscribeメソッドには Observerが Observableからの通知の受信時に何をするかを定義する。
disposesubscribeを解除する。onCompletedや onErrorが発⽣すると Observableはもう Eventを発⾏できないので⾃動的に disposeされる。DisposeBagDisposeBagは DisposeBag⾃⾝が開放されるタイミングで、登録された subscribeをdisposeする。
SubjectSubjectは Observableかつ Observerのオブジェクト。Eventは onNext, onComplete, onErrorが流れる。4種類あるAsyncSubjectReplaySubjectBehaviorSubjectPublishSubject
SubjectAsyncSubjectonCompletedが呼ばれた直後に onNextで渡された最後の値だけ流す。ReplaySubjectsubscribe後に値を流す。bufferSizeに指定した数だけ値を流す。
SubjectBehaviorSubject初期値をもつ Subject。直前に渡された値を保持しsubscribe()された際にその値を流す。onNext, onCompleted, onErrorは発⽣し次第そのまま流す。PublishSubject初期値をもたない Subject。onNext, onCompleted, onErrorは発⽣し次第そのまま流す。
RelayRelayは Subjectのラッパー。Eventは onNextのみが流れる。2種類あるBehaviorRelay: BehaviorSubjectのラッパー。PublishRelay: PublishSubjectのラッパー。
TraitsObservableのラッパー3種類あるSingleCompletableMaybe
TraitsSingle⼀度だけ Eventを送る Observable。流れる Eventは onSuccess, onErrorの2つ。onSuccessの実態は onNextと onCompletedの組み合わせ。onNextが含まれるため、値を流すことができる。Completable⼀度だけ Eventを送る Observable。流れる Eventは onCompleted, onErrorの2つ。onNextが含まれないため、値を流すことができない。
TraitsMaybe⼀度だけ Eventを送る Observable。流れる Eventは onSuccess, onCompleted, onErrorの3つ。Singleと Completableを合わせたようなもの。
RxCocoa(UI部品⽤のRx) には別の Traitsがある。DriverSignalControlPropertyControlEvent
RxCocoa TraitsDriverエラーを無視できる。メインスレッドで実⾏される。replayする。(同じ値を繰り返し流す。)Signalエラーを無視できる。メインスレッドで実⾏される。replayしない。
RxCocoa TraitsControlPropertyエラーを無視できる。メインスレッドで実⾏される。replayする。メモリが解放されると completeが流れるControlEventエラーを無視できる。購読時に初期値を流さない。メモリの割り当てが解放されると completeが流れる。メインスレッドで実⾏される。
Observableにも種類があるHotCold
HotとColdHotsubscribeされてなくても Eventが流れ、1つの Streamを複数の Observerが subscribeできる。Coldsubscribeされて初めて Eventが流れ出し、subscribeされる度に別々の Streamが⽣成される。
あと2つ⼤きな概念があるOperatorsScheduler
ありがとうございました。