ios - 将 ReactiveCocoa 中的信号组合成一个在所有变化时触发的新信号

标签 ios objective-c reactive-cocoa

我正在尝试学习 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/

相关文章:

ios - CAShapeLayer 蒙版不显示

ios - 当我在没有 sudo 的情况下安装 cocoapods 时,我会失去哪些权限?

ios - Objective C UITextField 值空白

ios - 如何从订阅的 RACSignal 中获取错误值?

objective-c - react 性 cocoa : eliminate state in subscribeNext: block

ios - 为什么我无法使用来自 flattenMap 的信号完成订阅

iOS Format String 转化为分秒

ios - SwiftUI - 在转换期间更新目标 View

ios - uiview的圆角看起来不太好,uiview

ios - UITableView 中的 UIScrollView 中的 ContentOffset 问题