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

- (NSArray *) methodA { ... }

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

我想知道是否有可能避免执行methodA,除非实际使用了该序列,但在我决定使用它的情况下,仍然从methodB返回该序列以继续进行下去。

更新

我设法通过使用信号而不是顺序来实现所需的行为。
- (RACSignal *)methodB {
    RACSignal *racSignal = [RACSignal defer:^RACSignal * {
        return [self methodA].rac_sequence.signal;
    }];

    return racSignal;
}

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

最佳答案

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

10-07 12:04