想象我有两个信号:一个便宜和昂贵的:ReactiveCocoa - 订阅第二信号,如果第一个没有任何价值,完成
RACSignal *localSignal; // Cheap signal. Sends object without network request
// if possible, otherwise completes immediately.
RACSingal *networkSignal; // Expensive one. Always sends data,
// but requires expensive network operation.
现在我想创建一个信号,它发送的值从第一个信号(如果有的话)或订阅第二个信号并从该信号发送数据。
下面的解决方案几乎给我我想要的,但它总是订阅第二个昂贵的信号,即使从第一个信号获取值,并忽略第二个信号的值。
[[localDataSignal concat:networkDataSignal] take:1];
有没有办法有效解决问题?
我觉得这不应该订阅昂贵的信号,而且这是一个处置错误。可能想要就RAC的项目提交一个问题。 – 2015-02-11 15:53:53
刚刚发现问题。看到我的答案吼叫。我很厚,因为本地信号在它所订阅的同一个线程中工作,取:1甚至没有机会处理整个序列。 – Slabko 2015-02-12 12:22:03