RACSignal常用方法深入分析(终)
2023-12-29 12:32:01
switchToLatest
switchToLatest方法用于将一个信号转换为一个新的信号,新信号的元素是原始信号发出的最新信号的元素。这意味着,当原始信号发出一个新的信号时,switchToLatest方法就会将新信号转换为一个新的信号,并将新信号的元素发送给订阅者。
switchToLatest方法的语法如下:
- (RACSignal *)switchToLatest;
switchToLatest方法的返回值是一个新的信号,该信号的元素是原始信号发出的最新信号的元素。
switchToLatest方法的示例代码如下:
RACSignal *signalOfSignals = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
RACSignal *signal1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"Signal 1"];
[subscriber sendCompleted];
return nil;
}];
RACSignal *signal2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"Signal 2"];
[subscriber sendCompleted];
return nil;
}];
[subscriber sendNext:signal1];
[subscriber sendNext:signal2];
[subscriber sendCompleted];
return nil;
}];
RACSignal *signalOfValues = [signalOfSignals switchToLatest];
[signalOfValues subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
输出:
Signal 1
Signal 2
deliverOn
deliverOn方法用于指定一个调度器,用于在该调度器上发送信号的元素。这意味着,当信号发出一个元素时,deliverOn方法会将该元素发送到指定的调度器上,由调度器负责将该元素发送给订阅者。
deliverOn方法的语法如下:
- (RACSignal *)deliverOn:(RACScheduler *)scheduler;
deliverOn方法的第一个参数是一个调度器,用于在该调度器上发送信号的元素。
deliverOn方法的返回值是一个新的信号,该信号的元素在指定的调度器上发送。
deliverOn方法的示例代码如下:
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"Signal"];
[subscriber sendCompleted];
return nil;
}];
RACSignal *signalOnMainThread = [signal deliverOn:[RACScheduler mainThreadScheduler]];
[signalOnMainThread subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
输出:
Signal
throttle
throttle方法用于限制信号发出的元素的频率。这意味着,当信号发出一个元素时,throttle方法会检查该元素是否满足指定的条件,如果满足条件,则将该元素发送给订阅者;如果不满足条件,则丢弃该元素。
throttle方法的语法如下:
- (RACSignal *)throttle:(NSTimeInterval)interval;
throttle方法的第一个参数是一个时间间隔,用于指定元素满足条件的间隔。
throttle方法的返回值是一个新的信号,该信号的元素满足指定的条件。
throttle方法的示例代码如下:
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"Signal 1"];
[subscriber sendNext:@"Signal 2"];
[subscriber sendNext:@"Signal 3"];
[subscriber sendNext:@"Signal 4"];
[subscriber sendNext:@"Signal 5"];
[subscriber sendCompleted];
return nil;
}];
RACSignal *throttledSignal = [signal throttle:1.0];
[throttledSignal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
输出:
Signal 1
Signal 3
Signal 5
distinctUntilChanged
distinctUntilChanged方法用于过滤掉连续重复的元素。这意味着,当信号发出一个元素时,distinctUntilChanged方法会检查该元素是否与前一个元素相同,如果相同,则丢弃该元素;如果不相同,则将该元素发送给订阅者。
distinctUntilChanged方法的语法如下:
- (RACSignal *)distinctUntilChanged;
distinctUntilChanged方法的返回值是一个新的信号,该信号的元素与前一个元素不同。
distinctUntilChanged方法的示例代码如下:
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"Signal 1"];
[subscriber sendNext:@"Signal 1"];
[subscriber sendNext:@"Signal 2"];
[subscriber sendNext:@"Signal 2"];
[subscriber sendNext:@"Signal 3"];
[subscriber sendCompleted];
return nil;
}];
RACSignal *distinctSignal = [signal distinctUntilChanged