1

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

说我有这个简单的信号

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

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

4

2 回答 2

4

您也可以只使用-take:以下参数1

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

如果您不希望信号在完成之前发送值,您可以-flattenMap:在响应中使用 as,或者您可以使用-takeUntil:

RACSignal *completesBeforeFirstValue = [originalSignal takeUntil:originalSignal];

(在-takeUntil:传递值之前触发信号触发时,操作员将导致信号完成。)

于 2014-03-01T21:17:53.083 回答
0

一些替代品

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

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

RACSignal *completeSignal = [signal flattenMap:^(id value) {
    return nil;
}];
于 2014-02-28T12:16:38.093 回答