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<RACSubscriber>  _Nonnull subscriber) {
        
        [subscriber sendNext:@"我是图片1"];
        
        return nil;
        
    }];
    
    RACSignal * signal2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        
        [subscriber sendNext:@"我是图片2"];
        
        return nil;
        
    }];
    
    RACSignal * signal3 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _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{
    
}

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



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

奔溃日志

其实他的意思就是,你的三张图片都不给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);
    
}
pic

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容