retry重试
只要失败,就会重新执行创建信号中的block,直到成功.
__block inti =0;
[[[RACSignal createSignal:^RACDisposable *(id subscriber) {
if(i ==10) {
[subscriber sendNext:@1];
}else{
NSLog(@"接收到错误");
[subscriber sendError:nil];
}
i++;
returnnil;
}] retry] subscribeNext:^(idx) {
NSLog(@"%@",x);
} error:^(NSError *error) {
NSLog(@“error = %@",error);
}];
replay重放
当一个信号被多次订阅,反复播放内容
RACSignal *signal = [[RACSignal createSignal:^RACDisposable *(id subscriber) {
[subscriber sendNext:@1];
[subscriber sendNext:@2];
returnnil;
}] replay];
[signal subscribeNext:^(idx) {
NSLog(@"第一个订阅者%@",x);
}];
[signal subscribeNext:^(idx) {
NSLog(@"第二个订阅者%@",x);
}];
throttle节流
当某个信号发送比较频繁时,可以使用节流,在某一段时间不发送信号内容,过了一段时间获取信号的最新内容发出。
RACSubject *signal = [RACSubject subject];
_signal = signal;
// 节流,在一定时间(1秒)内,不接收任何信号内容,过了这个时间(1秒)获取最后发送的信号内容发出。
[[signal throttle:1] subscribeNext:^(idx) {
NSLog(@"%@",x);
}];