【问题标题】:ReactiveCocoa merge that completes when input signal completes输入信号完成时完成的 ReactiveCocoa 合并
【发布时间】:2015-06-04 14:53:06
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c reactive-cocoa


    【解决方案1】:

    不是 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];
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 2015-07-01
      相关资源
      最近更新 更多