Help us understand the problem. What is going on with this article?

ReactiveCocoaに出てくる用語の整理

More than 5 years have 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を使ってね

yaotti
Qiitaを作っているIncrements株式会社の創業者
http://yaotti.hatenablog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした