以下のように書けばよい。
[[[RACSignal interval:3 onScheduler:[RACScheduler scheduler]]
take: 1]
subscribeNext:^(id x) {
NSLog(@"done");
}]
(第三引数は適当でよい。RACSignal+Operations.mのソースを確認した限りでは使用していない引数) (第三引数がある版ではタイマーの許容遅延量を指定できるとのこと。コメント欄参照)
ReactiveCocoaのRACSignalにはinterval~
とtimeout~
というメソッドがそれぞれ用意されているので、それぞれJavascriptのsetInterval
とsetTimeout
に対応してるかと思いきやそうではない。
- (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
を引数で明示してやる必要がある。