iOS-SDK开发

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

\color{gray}{欢迎大佬来指正纠错,共同学习😏!}

上一篇下一篇

猜你喜欢

热点阅读