iOS开发 「RAC」用RAC实现界面有多个请求都完成后再刷新界
2021-11-02 本文已影响0人
俺不是大佬儿
- (RACSignal *)rac_liftSelector:(SEL)selector withSignalsFromArray:(NSArray *)signals
当传入的signals
(信号数组),每一个signal
都至少sendNext
过一次,才会去触发第一个selector
参数的方法,就是说当signals
中的所有请求信号都执行完成后才会触发selector
对应的方法
应用示例:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
//创建第一项数据请求
RACSignal *request1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSLog(@"请求第一项数据");
[subscriber sendNext:@"获取到的第一项请求数据"];
return nil;
}];
//创建第二项数据请求
RACSignal *request2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSLog(@"请求第二项数据");
[subscriber sendNext:@"获取到的第二项请求数据"];
return nil;
}];
//创建第三项数据请求
RACSignal *request3 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
NSLog(@"请求第三项数据");
[subscriber sendNext:@"获取到的第三项请求数据"];
return nil;
}];
// Selector调用:当所有信号都发送数据时调用
// 数组存放多个信号
// Selector注意点:参数根据数组元素决定(数据的顺序 / 数据类型)
// Selector方法中的参数类型,就是信号传递出来的数据
[self rac_liftSelector:@selector(updateUI:data2:data3:) withSignalsFromArray:@[request1,request2,request3]];
}
// 只有三个请求都请求完成才会调用
- (void)updateUI:(NSString *)data1 data2:(NSString *)data2 data3:(NSString *)data3
{
NSLog(@"请求都结束了:%@ \n %@ \n %@",data1,data2,data3);
}