场景说明
有时候,一个页面内容太多可能需要分模块加载,如果想全部的模块都加载完后再刷新页面。要么可以用gcd的group来实现,要么也可以用RAC的rac_liftSelector:
来实现。
代码实现
-(void)rac_liftDemo{
//请求1
RACSignal * signal1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
//发送请求
NSLog(@"请求网络数据 1");
//发送数据
[subscriber sendNext:@"数据1 来了"];
return nil;
}];
//请求2
RACSignal * signal2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
//发送请求
NSLog(@"请求网络数据 2");
//发送数据
[subscriber sendNext:@"数据2 来了"];
return nil;
}];
//数组:存放信号
//当数组中的所有洗好都发送了数据,才会执行Selector
//方法的参数:必须和数组的信号一一对应!!
//方法的参数:就是每一个信号发送的数据!!
[self rac_liftSelector:@selector(updateUIWithOneData:TwoData:) withSignalsFromArray:@[signal1,signal2]];
}
- (void)updateUIWithOneData:(id )oneData TwoData:(id )twoData {
NSLog(@"%@",[NSThread currentThread]);
//拿到数据更新UI
NSLog(@"UI!!%@%@",oneData,twoData);
}
需要注意的是:
- 有几个信号,@selector里面的方法就要有个参数对应接收,不然会报错
- 每一个信号可对应一个网络请求
rac_liftSelector:
该方法的作用仅此一个,就是合并多个信号一次发送。