一个非常简单的问题,我正在监督RAC中的关键方法。
说我有这个简单的信号
RACSignal *signal = [[RACSignal return:@"hello"] delay:10]
如何在不更改上述代码的情况下创建一个新信号,在传递任何值时发送completed
(在这种情况下@"hello"
之后10 seconds
)?
答案 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;
}];