具有时间间隔的 Reactive ObjC 发射序列
Reactive ObjC emit sequence with time interval
我正在尝试发出一系列数字,每次发出之间都有延迟。我有一个带有一系列数字的 NSIndexSet,
[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 100)]
现在我想延迟发出每个数字,比如在发出数字 1 后几秒发出数字 2 等等。我是 Reactive ObjC 的新手。我该怎么做?
我正在尝试这样的事情,
[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, runescapePackages.count-1)].rac_sequence ...
基本上我想从后台线程发出每个项目,订阅者在主线程中使用该项目。
如何在 OBJ-C 中实现?
没有内置运算符可以立即执行此操作,但您自己构建起来并不难。
您可以通过 [sequence signal
将您的序列变成 RACSignal
。此外,如果需要,您可以在那里提供一个调度程序(如果不需要,RAC 将为您创建一个新的调度程序)
RACScheduler *backgroundScheduler = [RACScheduler scheduler];
RACSignal *sequence = [[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 50)]
rac_sequence]
signalWithScheduler:backgroundScheduler];
这个信号的问题在于,它会立即发出序列的所有值。也许您自己已经尝试过 delay
操作,但这并没有帮助,因为它会延迟所有事件相同的时间,因此它们会延迟到达,但仍然紧接着另一个。
解决这个问题的基本思路是将数字信号与常规报价配对。
以下是创建定期发出事件的信号的方法
RACSignal *tick = [RACSignal interval:0.5 onScheduler:backgroundScheduler];
现在为了 "pair them up" 你想使用 zip
运算符,因为它会等到两个信号都发送了它们的第一个值,直到它发送一个以两个值作为其第一个值的元组,然后等到两者都发送了第二个值,依此类推。因此,序列的数值必须等待它们的滴答事件
[[[[RACSignal zip:@[tick, sequence]] map:^(RACTuple *tuple) {
return [tuple second];
}] deliverOn:[RACScheduler mainThreadScheduler]]
subscribeNext:^(id _Nullable x) {
NSLog(@"Value: %@", x);
}];
我正在尝试发出一系列数字,每次发出之间都有延迟。我有一个带有一系列数字的 NSIndexSet,
[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 100)]
现在我想延迟发出每个数字,比如在发出数字 1 后几秒发出数字 2 等等。我是 Reactive ObjC 的新手。我该怎么做?
我正在尝试这样的事情,
[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, runescapePackages.count-1)].rac_sequence ...
基本上我想从后台线程发出每个项目,订阅者在主线程中使用该项目。
如何在 OBJ-C 中实现?
没有内置运算符可以立即执行此操作,但您自己构建起来并不难。
您可以通过 [sequence signal
将您的序列变成 RACSignal
。此外,如果需要,您可以在那里提供一个调度程序(如果不需要,RAC 将为您创建一个新的调度程序)
RACScheduler *backgroundScheduler = [RACScheduler scheduler];
RACSignal *sequence = [[[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 50)]
rac_sequence]
signalWithScheduler:backgroundScheduler];
这个信号的问题在于,它会立即发出序列的所有值。也许您自己已经尝试过 delay
操作,但这并没有帮助,因为它会延迟所有事件相同的时间,因此它们会延迟到达,但仍然紧接着另一个。
解决这个问题的基本思路是将数字信号与常规报价配对。
以下是创建定期发出事件的信号的方法
RACSignal *tick = [RACSignal interval:0.5 onScheduler:backgroundScheduler];
现在为了 "pair them up" 你想使用 zip
运算符,因为它会等到两个信号都发送了它们的第一个值,直到它发送一个以两个值作为其第一个值的元组,然后等到两者都发送了第二个值,依此类推。因此,序列的数值必须等待它们的滴答事件
[[[[RACSignal zip:@[tick, sequence]] map:^(RACTuple *tuple) {
return [tuple second];
}] deliverOn:[RACScheduler mainThreadScheduler]]
subscribeNext:^(id _Nullable x) {
NSLog(@"Value: %@", x);
}];