我一直在阅读 RACSequences 是“拉动驱动的”。有人可以向我解释如何根据需要从序列中“提取”值吗?
假设我有一个已变成信号的数组。然后说有另一个信号,当它发送一个值时,我想从数组序列中获取下一个值。我将如何做到这一点?这是我尝试过的,但它不起作用。
RACSignal *arraySig = [@[@1, @2, @3].rac_sequence signal];
RACSubject *triggerSig = [RACSubject subject];
[[[arraySig doNext:^(id x) {
DDLogVerbose(@"DoNext got %@ from array", x);
}]
sample:triggerSig]
subscribeNext:^(id x) {
DDLogVerbose(@"Subscriber got %@ from array", x);
}];
[triggerSig sendNext:@"Give me data!"];
// I expect to see "Got 1 from array" printed out
编辑:我更新了上面的示例,以便在示例之前有一个下一步,最后有一个订阅者。
这是我得到的输出:
DoNext got 1 from array
DoNext got 2 from array
DoNext got 3 from array
没有值传递给订阅者。我认为这sample
不是我想要的。对我来说,它看起来像是sample
订阅了信号并立即发送了数组中的值。但是,在样本信号发送之前,样本会阻止值传递给订阅者。我的理论是,当触发信号发送时,数组中的所有值都已发送。尽管情况似乎如此,但订阅者至少会获得发送的最后一个值@3。