ReactiveCocoa操作方法-重複

一個蘿蔔壹個坑發表於2018-01-03

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

}];

相關文章