【发布时间】:2015-06-04 14:53:06
【问题描述】:
在 ReactiveCocoa 中,是否有类似于 merge: 的机制,当任何正在合并的信号完成时完成?
我找到了一种解决方法,其中涉及将输入信号与[RACSignal return:foo] 连接,然后在合并后添加take:1,但这似乎相当冗长。有没有更简单的方法?
【问题讨论】:
标签: objective-c reactive-cocoa
在 ReactiveCocoa 中,是否有类似于 merge: 的机制,当任何正在合并的信号完成时完成?
我找到了一种解决方法,其中涉及将输入信号与[RACSignal return:foo] 连接,然后在合并后添加take:1,但这似乎相当冗长。有没有更简单的方法?
【问题讨论】:
标签: objective-c reactive-cocoa
不是 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];
}
【讨论】: