如何在不使用嵌套订阅的情况下订阅两个信号并访问其最新值?

时间:2014-02-19 17:49:20

标签: objective-c reactive-cocoa

在我目前的情况下,我可以这样做:

[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实现此目的?

1 个答案:

答案 0 :(得分:1)

您可以使用+combineLatest:reduce:执行此操作:

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