美文网首页
RAC的flattenMap操作1

RAC的flattenMap操作1

作者: 凯司机 | 来源:发表于2021-05-12 22:28 被阅读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完成

相关文章

网友评论

      本文标题:RAC的flattenMap操作1

      本文链接:https://www.haomeiwen.com/subject/yrvirltx.html