2014-02-19 53 views
0

在我目前的狀況,我可以這樣獲得的:如何訂閱兩個信號並在不使用嵌套訂閱的情況下訪問其最新值?

[isFooSignal subscribeNext:^(NSNumber *isFoo) { 
    [isBarSignal subscribeNext:^(NSNumber *isBar) { 
     if ([isFoo boolValue]) { 
      if ([isBar boolValue]){ 
       // isFoo and isBar are both true 
      } 
      else { 
       // isFoo is true and isBar is false 
      } 
     } 
    }]; 
}]; 

,但最好我想我要訂閱兩個信號,並能夠同時訪問他們最新的值,而不管其改變第一。

喜歡的東西:

...^(NSNumber *isFoo, NSNumber *isBar) { 
    NSLog(@"isFoo: %@" isFoo); 
    NSLog(@"isBar: %@", isBar); 
}]; 

我怎樣才能做到這一點使用ReactiveCocoa?

+0

其實,這不適合我目前的狀況,因爲沒有任何反應,只有當'isFoo'變化工作。 –

回答

1

你可以用+combineLatest:reduce:做到這一點:

[[RACSignal 
    combineLatest:@[ isFooSignal, isBarSignal ] 
    reduce:^(NSNumber *isFoo, NSNumber *isBar) { 
     return @(isFoo.boolValue && isBar.boolValue); 
    }] 
    subscribeNext:^(NSNumber *isBoth) { 
     NSLog(@"both true? %@", isBoth); 
    }]; 
+0

你能更具體嗎?我嘗試這樣做似乎導致只能訪問其中一個值。 –

+0

更新了一些示例代碼。 –

+0

謝謝,我試過這個,但如問題最後所示,我需要能夠訪問這兩個值。 –