在ReactiveCocoa中,是否存在类似于merge:
的机制,当合并的任何信号完成时,它会完成?
我找到了一种解决方法,包括将输入信号与[RACSignal return:foo]
连接,然后在合并后添加take: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];
}