俺的RxSwiftまとめ②


RxSwiftの特徴をさらに詳しく

この記事は、俺的RxSwiftまとめ①の続きです。

RxSwiftの特徴

非同期処理には、気を付けるポイントが2点ある。

  • コードの実行順序
  • 共有されたmutableなデータをどのように取り扱うか

である。

RxSwiftは、これらの問題に対して、以下の2つの概念を取り入れて、対処している。

そして、以下の5つの特徴を手に入れている。(=Reactive System)

  • Resposive→UIにアプリの最新状態を常に反映すること
  • Resilient→各処理が分離されていて、エラーリカバリが容易であること
  • Elastic→変動ワークロードに対して、遅延読み込みスロットリング、リソースシェアなどの機能で対処する
  • Message-driven→コンポーネント間のやりとりをメッセージベースの通信を使用して非同期に行い、疎結合にして再利用性を高め、クラスのライフサイクルと別に実装すること

RxSwiftの構成要素

RxSwiftはObservable/operator/schedulerの3つの構成要素を持っている。

Observable

Observable<type>で定義する、観察対象のこと。
時間の経過とともに生成される一連のデータの不変なsnapshot(その瞬間のデータのコピー)を流す一連のイベントを、非同期に生成することができる。

複数のobserver(観察者)がリアルタイムにイベントに反応して、UIを更新したり、データを利用できる。
ObservableType protocolは以下の3つのイベントを生成することができる。

  • next → 次のデータをobserverに持ってくるイベント。completedが起こるまで、値をobserverに持ってき続ける。
  • completed → 一連のイベントをsuccessで終了させ、observerに通知する。
  • errorobservableerrorで終了したことを通知する。

Operators

Observable<type>には、非同期、イベントに基づいた処理を行うメソッド(Operators)が多数含まれている。これらはSide effect(ユーザー側にUIで反映すること)なしに出力のみを生成するので、Operatorを組み合わせて入力を任意の値に変換することができる。
代表的なOperatorを挙げると、

  • filiter → 条件に合う値のみを抽出する
  • mapObservableで流れてきた全ての値に対して処理を行う
  • skip → 特定の値をスキップする

などがあります。(後ほど別記事でまとめたいと思います。)

Scehduler

SchedulerDispatch queueと同じようなもので、処理をメインスレッドとサブスレッドで分けることができる。RxSwiftは定義済みのSchedulerがたくさんあるので、便利!
*UIの更新はメインスレッドで行う

RxCocoa

RxSwiftは、Swiftに限らないRxの共通使用に関するものだ。Swift特有のUIKitなどは、RxCocoaを用いて扱っていく。
RxCocoaは多くのUIパーツにリアクティブな機能を追加しているライブラリである。