LoginSignup
2
3

More than 5 years have passed since last update.

UniRxのシンプルなサンプル その13 (IObservableを作成する Create)

Last updated at Posted at 2017-02-21

IObservableを作成する

ソースコードが吹き飛んで心が折れたので、更新していなかったのですが1年ぶりに記事だけの提供にします。

CreateはIObservableの挙動を定義して文字通り好きなIObservableを定義するメソッドです。
これを理解するにはそもそものIObservableとIObserverの理解が必要になります。

ColdなIObservableとは何なのかソースコードを読んで理解してみる

自分で書いた記事ですが、とりあえずIObservableとIObserverが何をしているかを書いているので読んでみるといいかも。

Createメソッドとは

簡単に言うとIObservableの役割はSubscribeされたときに引数のIObserverに対して、各々決められたタイミングでOnNext,OnError,OnCompleteの処理をしてそれを中断するキャンセルトークンであるIDisposableを返すことです。

ですからCreateはこのSubscribeされたときの挙動をそのまま指定してIObservableを作成するメソッドになります。
そうみるとCreateの以下の定義は素直にSubscribeされたときの挙動を定義する。ということが見て取れます。

public static IObservable<T> Create<T>(Func<IObserver<T>, IDisposable> subscribe)

作ってみる

実際に
1,1,2,3,5とデータが流れてくるIObservableを作成してみます。

SimpleCreate

            Observable.Create<int>(observer =>
            {
                observer.OnNext(1);
                observer.OnNext(1);
                observer.OnNext(2);
                observer.OnNext(3);
                observer.OnNext(5);

                return Disposable.Empty;
            }).Subscribe(i =>
            {
                Debug.Log(i);
            });

このような形でSubscribeしてきたobserverにOnNextしていけばいいわけです。

今回はキャンセルするものがなかったので、Emptyを返していますが、RxにはいくつかのIDisposableクラスが用意されているのでそれを使って返します。

このメソッドが使えるとどんなものも簡単にRx化できるので大変便利です。
(まぁぶっちゃけ、かなりのことがこのメソッド使わずにできるので使うことあんまないんですけどね)

2
3
1

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
2
3