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);
}];