我遇到与此帖Combine signals in ReactiveCocoa to a new one that fires when all change
相同的问题所以我改为使用zip:奇怪的问题是第二个信号数据不是最新的。我在第二个信号的地图代码中写了一个日志,这是最新的。 E.g。
信号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为旧值且信号未触发。
答案 0 :(得分:18)
+[RACSignal zip:]
并不总能为您传递的每个信号提供最新值。它为您提供每个信号的 next 值。这意味着如果你有以下大理石图:
Signal A | -(a0)-------------(a1)-----x
|
Signal B | ----(b0)-(b1)-(b2)----(b3)--->
|
zip:A,B | ----(a0,b0)-------(a1,b1)--x
|
+-------------------------------
-- Time -->
发送(a0, b0)
时,您的信号将发送b0
,发送(a1, b1)
后发送a1
,然后Signal A
将不再发送任何值}仅在两个值之后完成。
+[RACSignal combineLatest:reduce:]
将始终为您传递给它的每个信号提供最新值至少一个值):
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 -->