ReactiveCocoaに出てくる用語の整理

  • 68
    Like
  • 0
    Comment
More than 1 year has passed since last update.

StreamとかSignalなどの用語の意味はReactiveCocoa/Documentation/FrameworkOverview.md at master · ReactiveCocoa/ReactiveCocoa · GitHubに書いてある.
以下それらの用語まとめ

Stream (RACStream)

変化する一連の値(オブジェクト)を表す.値が変化する順番にしか取れない.
HaskellのモノイドとかMonadZipのような型クラスと同等のものを実装している.
Stream自体を直接使うことは少なく(RACStreamは抽象クラス),signalsやsequencesとして使うことが多い.

Signal (RACSignal)

push-drivenなstream.
処理が実行されたりデータを受け取ると,シグナルにより値が送られる(? 原文: "values are sent on the signal").値にアクセスするにはsignalをsubscribeする必要がある.
シグナルが送るイベントには以下の3種類がある

  • next: ストリームから来た新しい値.値がnilになることもある
  • error: シグナルが完了する前にエラーが起きたことを示す.イベントはNSErrorを含むかもしれない
  • completed: シグナルが完了し,もう新しい値はstreamに追加されないことを表す.

シグナルはnextがn回後errorcompletedが一度起きて終わる.(n=0~)

シグナル購読

購読者はシグナルからのイベントを待つ(待てる)何か.RACでは購読者はRACSubscriberプロトコルに準拠したオブジェクトなら良い.

購読-subscribeNext:error:completed:などのメソッドで作成される.

シグナルが完了/エラー時に購読は破棄されるが,手動で止めることもできる(RACDisposable)

Subjects (RACSubject)

subjectは手で制御できるシグナル(mutableなシグナル).nextやcompleted, errorなどのイベントを自由に送れる.
RACでないコードとシグナルを利用したコードを繋ぐのに便利.例えばブロックの複数コールバック内でアプリケーションロジックを制御するかわりに,共有されたsubjectにブロック内からイベントを送るなど.

Commands (RACCommand)

何かのアクションへの反応としてトリガーされるシグナル.主にUI-drivenな操作で使う.例えばボタンがクリックされたときにsignalにより自動でdisableにする,など.
RACはNSButtonにrac_commandプロパティを付けてくれる

Connections (RACMulticastConnection)

connectionは任意の数の購読者と共有される購読(subscription)
シグナルはデフォルトでは購読されるたびに処理が走り,新しい値を取得するが,これは処理の種類によっては問題になる(例えばネットワークアクセスなどの重い処理).
(RACSignalの-publish-multicast:メソッドで作られる)connectionは何度購読されても購読は1つだけ作成する.
そして一度接続されると(connectionのシグナルがhotになるという)全てのsubscriptionが捨てられるまではその唯一のsubscriptionを保持している(=新規にsubscriptionを作成することはしない)

Sequences (RACSequence)

pull-drivenなstream.Sequenceが持つ値は遅延評価され,またnilを含むことはできない.(NSArrayなどと同じ)
RACは-rac_sequenceメソッドをCocoaの各コレクションに追加してくれる.

Disposable (RACDisposable)

RACDisposableはキャンセルやリソースのcleanupのためのクラスだが,シグナルの購読解除に最もよく使われる.
subscriptionがdisposeされると,購読者は以降イベントを取得しない.またsubscriptionに関連する処理(ネットワークリクエストやバックグラウンド処理など)は全てキャンセルされる.

Schedulers (RACScheduler)

シグナルの連続した実行キュー

Value types

RACTuple

定数サイズのコレクション,nilを含むことができる

RACUnit

シングルトンな空value.steram内で使われる

RACEvent

任意のシグナルイベントを表す.

Foundation Support

Foundation classes向けのRAC-basedブリッジはフレームワークには入ってないので,使いたければRACExtensionsを使ってね