LoginSignup
3
3

More than 5 years have passed since last update.

ReactiveCocoaでJavaScriptのsetTimeoutっぽいことをやる

Last updated at Posted at 2014-04-20

以下のように書けばよい。

        [[[RACSignal interval:3 onScheduler:[RACScheduler scheduler]]
                take: 1]

                subscribeNext:^(id x) {
                    NSLog(@"done");
                }]

(第三引数は適当でよい。RACSignal+Operations.mのソースを確認した限りでは使用していない引数) (第三引数がある版ではタイマーの許容遅延量を指定できるとのこと。コメント欄参照)

ReactiveCocoaのRACSignalにはinterval~timeout~というメソッドがそれぞれ用意されているので、それぞれJavascriptのsetIntervalsetTimeoutに対応してるかと思いきやそうではない。

- (RACSignal *) timeout:(NSTimeInterval)interval onSchedular:(RACSchedular *)schedular
というメソッドはそのシグナルにスケジュールされている何らかのアクションが一定時間内に完了しなかった場合に終了させるためのもの。

上記の例だと1回だけで終了するが、10秒後に終了させたい場合等にRACSignal timeout~の方をつかう

        [[[RACSignal interval:3 onScheduler:[RACScheduler scheduler] :0]
                timeout:10 onScheduler:[RACScheduler scheduler]]

                subscribeNext:^(id x) {
                    NSLog(@"done");
                }]

そもそもRACSignal timeout~はインスタンスメソッドになっているのでinterval~と同じような使いかたはできない。

ちなみに [RACSignal interval:1]のような書き方はdeprecatedになったので、RACSchedularを引数で明示してやる必要がある。

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