Combine signals in ReactiveCocoa to a new one that fires when all change

ios, objective-c, reactive-cocoa

Solution

Instead of `+combineLatest:reduce:`, you want `+zip:reduce:`. Zip requires that all the signals change before reducing and sending a new value.

Problem

I'm trying to learn ReactiveCocoa and I'm writing a simple Space Invaders clone, based on a Ray Wenderlich tutorial. Lately during the development, I faced an issue I can't resolve. Basically I've two signals: - a tap gesture signal - a timed sequence that fires every second What I want to achieve is to combine these signals in a new one, that fires when both the signals change: is it possible? I saw the combineLatest method, but the block is execute whenever any signals change. My wanted pseudocode is: ``` RACSignal *updateEventSignal = [RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]]; RACSignal *gestureSignal = [[UITapGestureRecognizer new] rac_gestureSignal]; [[RACSignal combineBoth:@[gestureSignal, updateEventSignal] reduce:^id(id tap, id counter){ return tap; }] subscribeNext:^(id x) { NSLog(@"Tapped [%@]", x); }]; ``` Probably I can achieve the same result in other way or this is not the expected behaviour or ReactiveCocoa, but at this point I wonder if I'm in the right reactive track or not.

Original source