ReactiveCocoaでタイマー処理 その2

こんなことがあり、

前回の追記として、一回処理を即時実行してから、インターバルで処理を行いたい場合は以下のように書けるかと思います。

// NSTimer
- (void)doAndThenRepeatByTimer {
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:5.0
                                                      target:self
                                                    selector:@selector(someMethod:)
                                                    userInfo:nil
                                                     repeats:YES];
    [timer fire];
}

// RAC
- (void)doAndThenRepeatBySignal {
    [[[RACSignal interval:5.0] startWith:[NSDate date]] subscribeNext:^(NSDate *date) {
        NSLog(@"%@", date);
    }];
}

-[RACSignal startWith:]を使用すると、引数で渡した値1つだけのシグナルが用意され、その値の後にレシーバーのシグナルの値が続いて発行される形になります。なので、+[RACSignal interval:]の場合と同じ型の値として、[NSDate date]で現在日時の値が即座に発行されるようにしています(interval:で発行されるのはその時々の[NSDate date])。