文章系列
《RACSignal 》
《RACDisposable》
《RACSubject柳沙、RACReplaySubject》
《iOS RAC - 基本用法》
《iOS RAC - 定時(shí)器》
《iOS RAC - RACMulticastConnection》
《iOS RAC - RACCommand》
《iOS RAC - 核心方法bind》
《iOS RAC - 集合RACTuple、RACSequence》
《iOS RAC - rac_leftSelector》
《iOS RAC - 映射》
《iOS RAC - 過(guò)濾》
《iOS RAC - 登錄頁(yè)面永毅,MVVM》
在線程里面一定有一個(gè)這樣子的例子:同時(shí)下載三張圖片盗胀,三張圖片都下載完了缅茉,在顯示到UI上面瓶竭。那個(gè)時(shí)候是使用group针炉,現(xiàn)在來(lái)看看RAC是如何做的挠他。
1、先創(chuàng)建三個(gè)信號(hào)
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{
}
然后就開(kāi)開(kāi)心心運(yùn)行去……
嗯哼~~~~~ 結(jié)果當(dāng)然是奔潰啦
其實(shí)他的意思就是殖侵,你的三張圖片都不給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);
}
主要應(yīng)用的場(chǎng)景就是茉唉,一個(gè)頁(yè)面如果有多個(gè)請(qǐng)求,然后又要等到數(shù)據(jù)全部請(qǐng)求到结执,在刷新的時(shí)候度陆,或者類似于這樣子的場(chǎng)景就可以使用。
需要注意的是献幔,block在主線程懂傀,如果有耗時(shí)操作,最好還是放在子線程運(yùn)行斜姥。