iOS RAC - rac_liftSelector

文章系列
《RACSignal 》
《RACDisposable》
《RACSubject、RACReplaySubject》
《iOS RAC - 基本用法》
《iOS RAC - 定时器》
《iOS RAC - RACMulticastConnection》
《iOS RAC - RACCommand》
《iOS RAC - 核心方法bind》
《iOS RAC - 集合RACTuple、RACSequence》
《iOS RAC - rac_leftSelector》
《iOS RAC - 映射》
《iOS RAC - 过滤》
《iOS RAC - 登录页面,MVVM》



git地址



在线程里面一定有一个这样子的例子:同时下载三张图片,三张图片都下载完了,在显示到UI上面。那个时候是使用group,现在来看看RAC是如何做的。

1、先创建三个信号

    RACSignal * signal1 = [RACSignal createSignal:^RACDisposable * _Nullable(id  _Nonnull subscriber) {
        
        [subscriber sendNext:@"我是图片1"];
        
        return nil;
        
    }];
    
    RACSignal * signal2 = [RACSignal createSignal:^RACDisposable * _Nullable(id  _Nonnull subscriber) {
        
        [subscriber sendNext:@"我是图片2"];
        
        return nil;
        
    }];
    
    RACSignal * signal3 = [RACSignal createSignal:^RACDisposable * _Nullable(id  _Nonnull subscriber) {
        
        [subscriber sendNext:@"我是图片3"];
        
        return nil;
        
    }];

2、然后就是今天的主角了
self rac_liftSelector:<#(nonnull SEL)#> withSignalsFromArray:<#(nonnull NSArray *)#>

 [self rac_liftSelector:@selector(updateUI) withSignalsFromArray:@[signal1,signal2,signal3]];

- (void)updateUI{
    
}

然后就开开心心运行去……



嗯哼~~~~~ 结果当然是奔溃啦

iOS RAC - rac_liftSelector_第1张图片
奔溃日志

其实他的意思就是,你的三张图片都不给UI,UI怎么更新啊???

所以我们只需要这样子改改

[self rac_liftSelector:@selector(updateUIPic:pic2:pic3:) withSignalsFromArray:@[signal1,signal2,signal3]];

- (void)updateUIPic:(id)pic1 pic2:(id)pic2 pic3:(id)pic3{
    
    NSLog(@"我要加载了 : pic1 - %@ pic2 - %@ pic3 - %@",pic1,pic2,pic3);
    
}
iOS RAC - rac_liftSelector_第2张图片
pic

主要应用的场景就是,一个页面如果有多个请求,然后又要等到数据全部请求到,在刷新的时候,或者类似于这样子的场景就可以使用。

需要注意的是,block在主线程,如果有耗时操作,最好还是放在子线程运行。

你可能感兴趣的:(iOS RAC - rac_liftSelector)