【问题标题】:How create a RACSequence from a method that returns an array如何从返回数组的方法创建 RACSequence
【发布时间】:2014-02-13 11:24:50
【问题描述】:

给定一个返回对象数组的方法,如何创建一个仅在使用该方法时填充该方法的结果的序列?

- (NSArray *) methodA { ... }

- (RACSequence *) methodB {
  return [self methodA].rac_sequence;
}

我想知道是否有可能避免执行方法A,除非实际使用了序列,但仍然从方法B返回序列以传递,以防我决定使用它。

更新

我设法通过使用信号而不是序列来实现我想要的行为。

- (RACSignal *)methodB {
    RACSignal *racSignal = [RACSignal defer:^RACSignal * {
        return [self methodA].rac_sequence.signal;
    }];

    return racSignal;
}

现在 methodA 仅在订阅信号时调用。为什么没有类似的延迟序列概念?

【问题讨论】:

    标签: reactive-cocoa


    【解决方案1】:

    不,因为您以NSArray 开头,所以在调用rac_sequence 时已经对其进行了评估。如果-methodA 可以返回RACSequence,则序列的评估将延迟到需要时。

    【讨论】:

    • 嗨,乔希,我知道它已经过评估。我不控制 methodA 的输出,但我可以控制何时调用它,我在想可能有某种方法可以基于仅在第一次调用时执行的块创建序列。我才刚刚开始研究 ReactiveCocoa,所以我想我可能错过了一些明显的东西。
    • 我想我已经离开了足够长的时间来假设没有替代方法。
    • 嗨@nacross - 你最终使用了什么方法?
    猜你喜欢
    • 2011-02-04
    • 2016-04-05
    • 2021-11-25
    • 2014-11-20
    • 2013-02-04
    • 2014-08-07
    • 2014-11-01
    • 2011-04-14
    相关资源
    最近更新 更多