如果RACSignal接下来发送,我可以将其包装在发送完成的内容中吗?

时间:2014-02-28 12:11:09

标签: reactive-cocoa racsignal

一个非常简单的问题,我正在监督RAC中的关键方法。

说我有这个简单的信号

RACSignal *signal = [[RACSignal return:@"hello"] delay:10]

如何在不更改上述代码的情况下创建一个新信号,在传递任何值时发送completed(在这种情况下@"hello"之后10 seconds)?

2 个答案:

答案 0 :(得分:4)

您也可以使用参数-take:的{​​{1}}:

1

如果您不希望信号在完成之前发送值,您可以在回复中使用RACSignal *originalSignal = [[RACSignal return:@"hello"] delay:10]; RACSignal *completesOnFirstValue = [originalSignal take:1]; ,或者您可以使用-flattenMap:

-takeUntil:

RACSignal *completesBeforeFirstValue = [originalSignal takeUntil:originalSignal]; 运算符将在触发信号在传递值之前触发时使信号完成。)

答案 1 :(得分:0)

一些替代方案

RACSignal *completeSignal = [[signal take:1] ignoreValues];

RACSignal *completeSignal = [signal flattenMap:^(id value) {
    return [RACSignal empty];
}];

RACSignal *completeSignal = [signal flattenMap:^(id value) {
    return nil;
}];