【问题标题】:ReactiveCocoa CombineLatest: and Zip:ReactiveCocoa CombineLatest: 和 Zip:
【发布时间】:2014-03-21 13:16:09
【问题描述】:

我和这个帖子有同样的问题,Combine signals in ReactiveCocoa to a new one that fires when all change

所以我改用 zip:奇怪的问题是第二个信号数据不是最新的。我在第二个信号的地图代码中记录了一个日志,它是最新的。例如

信号 A,信号 B

[self rac_liftSelector:@selector(doTask:) withSignals:[RACSignal zip:@[A, B]      
reduce^id(NSNumber* a, NSNumber* b){
   a// is updated to latest
   b// is the old value
}];

在信号 B 中,我把日志发现 b 值更新了。 如果我改回 CombineLatest:b 已更新,但 a 是旧值且未触发信号。

【问题讨论】:

    标签: ios reactive-cocoa


    【解决方案1】:

    +[RACSignal zip:] 并不总是给你传递给它的每个信号的最新值。它为您提供每个信号的 next 值。这意味着,如果您有以下大理石图:

    Signal A | -(a0)-------------(a1)-----x
             |
    Signal B | ----(b0)-(b1)-(b2)----(b3)--->
             |
     zip:A,B | ----(a0,b0)-------(a1,b1)--x
             |
             +-------------------------------
                  -- Time -->
    

    发送b0 时,您的信号将发送(a0, b0),然后发送a1 时发送(a1, b1),然后不会再发送任何值,因为Signal A 仅在两个值之后完成。

    另一方面,

    +[RACSignal combineLatest:reduce:] 将始终为您传递给它的每个信号的最新值,只要 either 信号发送一个值(在所有信号至少发送一个值):

    Signal A | -(a0)-----------------------(a1)-----x
             |
    Signal B | ----(b0)----(b1)----(b2)------------(b3)---->
             |
    cl/r:A,B | ----(a0,b0)-(a0,b1)-(a0,b2)-(a1,b2)-(a1,b3)->
             |
             +----------------------------------------------
                  -- Time -->
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      相关资源
      最近更新 更多