LoginSignup
62

More than 5 years have passed since last update.

ReactiveCocoaに出てくる用語の整理

Last updated at Posted at 2013-06-12

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を使ってね

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62