如果接下来发送 RACSignal 是否可以将其包装在发送完成的东西中



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

假设我有这个简单的信号

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

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

您也可以

只使用参数为 1-take:

RACSignal *originalSignal = [[RACSignal return:@"hello"] delay:10];
RACSignal *completesOnFirstValue = [originalSignal take:1];

如果不希望信号在完成之前发送值,则可以使用响应中的-flattenMap:,也可以使用 -takeUntil:

RACSignal *completesBeforeFirstValue = [originalSignal takeUntil:originalSignal];

-takeUntil:运算符将在传递值之前触发触发信号时使信号完成。

一些替代

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

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

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

最新更新