LoginSignup
16
26

More than 5 years have passed since last update.

UniRx: Take,TakeWhile,TakeUntilの違い

Last updated at Posted at 2015-07-05

UniRx: Take,TakeWhile,TakeUntilの違い

+Take(int count)

Takeの場合
        Observable.Timer (TimeSpan.FromSeconds (1), TimeSpan.FromSeconds (1))
            .Take (2)
            .Subscribe (x => Debug.Log (x), () => Debug.Log ("end"));

Takeは何回データを流すかを決めるための関数。
int型の引数で何回を指定できる
Takeに指定した数がSubscribeまで流れ終わった瞬間にストリームが終了しOnComlateが流れる。


+TakeUntil(T,TOther)

TakeUntilの場合
        Observable.Timer (TimeSpan.FromSeconds (1), TimeSpan.FromSeconds (1))
            .TakeUntil (this.UpdateAsObservable ().Where (_ => Input.GetMouseButton (0)))
            .Subscribe (x => Debug.Log (x), () => Debug.Log ("end"));

TakeUntilはどのストリームAにデータが流れるまで、このストリームBにデータを流すかを決めるための関数。
引数に別のストリームを指定することでいつまでを指定できる
引数に渡したストリームAにOnNextが呼ばれた時に、こののストリームBが終了しOnCompleteが呼ばれる。


+TakeWhile(Func)

TakeWhileの場合
        Observable.Timer (TimeSpan.FromSeconds (1), TimeSpan.FromSeconds (1))
            .TakeWhile (count => count < 2)
            .Subscribe (x => Debug.Log (x), () => Debug.Log ("end"));

TakeWhileはいつまでデータを流すかを決めるための関数。
Func型の引数でストリームに流れたデータに対し、通過させるべきかどうかを指定できる。
TakeWhileにfalseを返した時点でストリームが終了しOnComlateが流れる。

内容に間違い等がありましたらコメントください><

16
26
2

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
16
26