2017-08-02 27 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