组合操作——Merge:
// 组合操作——Merge:按照信号执行时间顺序依次进行叠加,列出全部的元素。——先执行信号A到完成再执行信号B
RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@1];
[subscriber sendNext:@2];
[subscriber sendNext:@4];
// [subscriber sendError:[NSError new]];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
NSLog(@"signalA完成");
}];
}];
RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@11];
[subscriber sendNext:@22];
// [subscriber sendError:[NSError new]];
[subscriber sendNext:@44];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
NSLog(@"signalB完成");
}];
}];
// RACSignal *signalC = [signalA merge:signalB];
// RACSignal *signalC = [RACSignal merge:@[signalA, signalB]];
RACSignal *signalC = [RACSignal merge:RACTuplePack(signalA, signalB)];
[[signalC subscribeNext:^(id x) {
NSLog(@"subscribeNext:%@",x);
}] dispose];
2021-04-15 10:52:46.576964+0800 xxxxxx[3448:1034576] [DYMTLInitPlatform] platform initialization successful
2021-04-15 10:52:47.502916+0800 xxxxxx[3448:1034461] subscribeNext:1
2021-04-15 10:52:47.502953+0800 xxxxxx[3448:1034461] subscribeNext:2
2021-04-15 10:52:47.502963+0800 xxxxxx[3448:1034461] subscribeNext:4
2021-04-15 10:52:47.504275+0800 xxxxxx[3448:1034461] signalA完成
2021-04-15 10:52:47.504624+0800 xxxxxx[3448:1034461] subscribeNext:11
2021-04-15 10:52:47.504649+0800 xxxxxx[3448:1034461] subscribeNext:22
2021-04-15 10:52:47.504660+0800 xxxxxx[3448:1034461] subscribeNext:44
2021-04-15 10:52:47.504689+0800 xxxxxx[3448:1034461] signalB完成
Merge综合应用
// Merge综合应用:后缀的YES和NO是否需要动画
RACSignal *appearSignal = [[self rac_signalForSelector:@selector(viewWillAppear:)] mapReplace:@YES];
RACSignal *disapperSignal = [[self rac_signalForSelector:@selector(viewWillDisappear:)] mapReplace:@NO];
RACSignal *activeSignal = [RACSignal merge:@[appearSignal, disapperSignal]];
网友评论