2017-08-02 3 views
0

flattenMapメソッドを使用している問題があります。RACSignal - ブロックが呼び出されません。私は同じ信号にsubscribeNext場合、それだけで問題なく、flattenMapと問題は動作します。ここでReactiveCocoa - 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

あなたはちょっとした欠けているようです:少なくともあなたのスニペットでは誰もあなたの新しい信号を購読していません!

あなたはcombineLatestflattenMap経由self.aSignalself.otherSignalから新しい信号(self.yetAnotherSignal)を構築しています。

しかし、新しい信号とチェーン内の演算子は、何らかの形式で購読するまでは実際には動作しません。最も簡単な形式は、最初のスニペットと同じようにsubscribeNextです。

これはちょうどflattenMapでのケースではなく、その動作は同じです。最初の例のcombineLatestWithは、購読しないと何もしません。 mapfilterの場合も同じです...名前を付けてください。

+0

'combineLatestWith'は、両方の入力信号が少なくとも1つの値を送信するまで、何も送信しないことにも注意してください。 – jjoelson

関連する問題