2017-08-02 85 views
0

我有一个问题,使用flattenMap方法RACSignal - 块永远不会被调用。如果我subscribeNext到相同的信号,它工作得很好,问题是只有flattenMapReactiveCocoa - flattenMap块从来没有叫

这里是工作正常

[[self.aSignal combineLatestWith:self.otherSignal] subscribeNext:^(RACTuple *tuple) { 
    // gets called just fine 
}]; 

而且这里是行不通:

self.yetAnotherSignal = [[self.aSignal combineLatestWith:self.otherSignal] flattenMap:^RACStream *(RACTuple *tuple) { 
    // never gets called 
    return returnSignal; 
}]; 

我缺少的东西?或者我误解flattenMap的工作原理?

回答

1

看起来你只是缺少一点点(至少在你的片段中)没有人订阅你的新信号!

你从self.aSignalself.otherSignal通过combineLatestflattenMap构造一个新的信号(self.yetAnotherSignal)。

但是,新信号以及连锁店中的任何运营商在以某种形式订阅之前并没有真正做任何工作,最简单的形式是通过subscribeNext,就像您在第一个代码段中所做的那样。

这不仅仅是flattenMap的情况,它与任何操作(例如,如果您不想订阅它,您的第一个示例中的combineLatestWith将不会执行任何操作。 map,filter ......也是如此。

+0

还值得注意的是'combineLatestWith'不会发送任何东西,直到两个输入信号发送至少一个值。 – jjoelson