ReactiveCocoa合并在输入信号完成时完成

时间:2015-06-04 14:53:07

标签: objective-c reactive-cocoa

在ReactiveCocoa中,是否存在类似于merge:的机制,当合并的任何信号完成时,它会完成?

我找到了一种解决方法,包括将输入信号与[RACSignal return:foo]连接,然后在合并后添加take:1,但这似乎相当冗长。有更简单的方法吗?

1 个答案:

答案 0 :(得分:4)

未内置于ReactiveCoca。这可能是你应该在RACSignal上的帮助器类别中定义的,所以任何长篇大论都隐藏在一个漂亮的方法抽象背后。

这是一个使用materialize的(未经测试的)示例,该示例将为您提供信号事件的信号,因此您不需要在输入信号上附加任何内容:

+ (RACSignal *)sheepishMerge:(NSArray *)signals {
    RACSequence *completions = [signals.rac_sequence map:^(RACSignal *signal) {
        return [[signal materialize] filter:^(RACEvent *event) {
            return event.eventType == RACEventTypeCompleted;
        }];
    }];

    RACSignal *firstCompletion = [[RACSignal merge:completions] take:1];

    return [[RACSignal merge:signals] takeUntil:firstCompletion];
}