#RxSwiftの特徴をさらに詳しく
この記事は、俺的RxSwiftまとめ①の続きです。
##RxSwiftの特徴
非同期処理には、気を付けるポイントが2点ある。
- コードの実行順序
- 共有されたmutableなデータをどのように取り扱うか
である。
RxSwiftは、これらの問題に対して、以下の2つの概念を取り入れて、対処している。
-
宣言的プログラミング → 例:
a = b + c
と定義すれば、a
の値はb
とc
の値が変化するごとに更新する。 - 関数型プログラミング → 関数の入出力の連なりで処理を記述する方式
そして、以下の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に通知する。 -
error
→observable
がerror
で終了したことを通知する。
##Operators
Observable<type>
には、非同期、イベントに基づいた処理を行うメソッド(Operators
)が多数含まれている。これらはSide effect(ユーザー側にUIで反映すること)なしに出力のみを生成するので、Operator
を組み合わせて入力を任意の値に変換することができる。
代表的なOperator
を挙げると、
-
filiter
→ 条件に合う値のみを抽出する -
map
→Observable
で流れてきた全ての値に対して処理を行う -
skip
→ 特定の値をスキップする
などがあります。(後ほど別記事でまとめたいと思います。)
##Scehduler
Scheduler
はDispatch queue
と同じようなもので、処理をメインスレッドとサブスレッドで分けることができる。RxSwiftは定義済みのScheduler
がたくさんあるので、便利!
*UIの更新はメインスレッドで行う
#RxCocoa
RxSwift
は、Swift
に限らないRxの共通使用に関するものだ。Swift
特有のUIKit
などは、RxCocoa
を用いて扱っていく。
RxCocoa
は多くのUIパーツ
にリアクティブな機能を追加しているライブラリである。