我正在尝试学习 ReactiveCocoa,并且正在根据 Ray Wenderlich 教程编写一个简单的 Space Invaders 克隆版。 最近在开发过程中,我遇到了一个我无法解决的问题。 基本上我有两个信号:
- 点击手势信号
- 每秒触发的定时序列
我想要实现的是将这些信号组合成一个新信号,当两个信号都发生变化时触发: 可能吗? 我看到了 combineLatest 方法,但只要任何信号发生变化,就会执行该 block 。
我想要的伪代码是:
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);
}];
可能我可以通过其他方式实现相同的结果,或者这不是预期的行为或 ReactiveCocoa,但此时我想知道我是否在正确的 react 轨道上。 p>
最佳答案
您需要 +zip:reduce:
而不是 +combineLatest:reduce:
。 Zip 要求在减少和发送新值之前更改所有信号。
关于ios - 将 ReactiveCocoa 中的信号组合成一个在所有变化时触发的新信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20144752/