gpt4 book ai didi

ios - ReactiveCocoa : Chain a signal with a repeating signal

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:02 27 4
gpt4 key购买 nike

使用 ReactiveCocoa,我如何从重复信号中链接信号?

我想做这样的事情:每 5 秒,我运行一次网络请求。

为此,我创建了一个重复信号

RACSignal *each5SecondSignal = [[[RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]] take:1] concat:[RACSignal 5 onScheduler:[RACScheduler mainThreadScheduler]]];

和一个获取数据的信号

RACSignal* iframeSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {....

但我不知道如何链接这些。这是我的尝试(使用“then”方法)。

//This doesn't work, the log do not appear
[[each5SecondSignal then:^RACSignal *{
return iframeSignal;
}] subscribeNext:^(id x) {
NSLog(@"Request was made");
}];

但是,当我执行 [iframeSignal subscribeNext...] 时,信号的内容被调用,而当我执行时

//OK is logged every 5 seconds
[each5SecondSignal subscribeNext:^(id x) {
NSLog(@"OK");
}];

日志按预期显示。

你能帮帮我吗?

真诚的

杰瑞

最佳答案

首先,each5SecondSignal 可以简单得多。您不必调用 take:,因为它会导致信号在 5 秒后完成,如果我理解正确的话,您希望信号永远持续下去。

RACSignal *each5SecondSignal = [RACSignal interval:5 onScheduler:[RACScheduler mainThreadScheduler]]

并且您可以使用 flattenMap:,以便每次 each5SecondSignal 发送下一个值(每 5 秒发生一次)时调用 iframeSignal:

[[each5SecondSignal flattenMap:^RACStream *(id value) {
return iframeSignal;
}] subscribeNext:^(id x) {
NSLog(@"Request was made");
}];

关于ios - ReactiveCocoa : Chain a signal with a repeating signal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28748408/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com