RAC的flattenMap操作1
2021-05-12 本文已影响0人
凯司机
flattenMap的重要性:
// 可以使用FlattenMap实现很多的信号转换
// 支持串行异步操作(类似Promise)
// 满足Monad部分定义(bind和return才完全满足)
RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@1];
[subscriber sendNext:@2];
[subscriber sendNext:@3];
[subscriber sendNext:@4];
[subscriber sendNext:@5];
[subscriber sendCompleted];
return [RACDisposable disposableWithBlock:^{
NSLog(@"signalA1完成");
}];
}];
// 如果是一个信号包直接返回
// RACSignal *flatten = [signalA flattenMap:^RACStream *(RACSignal *value) {
// return value;
// }];
// 如果是一个普通值包装成信号直接返回
RACSignal *flatten = [signalA flattenMap:^RACStream *(id value) {
return [RACSignal return:value];
}];
// 如果是一个普通值包装成信号(加判断组成空信号)直接返回
// RACSignal *flatten = [signalA flattenMap:^RACStream *(id value) {
// BOOL filter = (value == nil);
// return filter ? [RACSignal empty] : [RACSignal return:value];
// }];
[[flatten subscribeNext:^(RACSignal *x) {
NSLog(@"subscribeNext:%@",x);
}] dispose];
2021-04-15 16:58:59.597512+0800 XXXXXX[3875:1107703] subscribeNext:1
2021-04-15 16:58:59.597590+0800 XXXXXX[3875:1107703] subscribeNext:2
2021-04-15 16:58:59.597654+0800 XXXXXX[3875:1107703] subscribeNext:3
2021-04-15 16:58:59.597790+0800 XXXXXX[3875:1107703] subscribeNext:4
2021-04-15 16:58:59.597816+0800 XXXXXX[3875:1107703] subscribeNext:5
2021-04-15 16:58:59.599021+0800 XXXXXX[3875:1107703] signalA1完成