iOS开发 「RAC」RAC映射方法的使用(flattenMap

2021-09-17  本文已影响0人  俺不是大佬儿
map: 用于普通信号,信号发出普通值
RACSignal *subA = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [subscriber sendNext:@[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",]];
        return nil;
    }];
    RACSignal *subB = [subA map:^id _Nullable(NSArray  *_Nullable tempArr) {
        // tempArr:源信号的内容
        // 返回值,就是处理源信号的内容,在这里直接返回了
        return tempArr;
    }];
    [subB subscribeNext:^(id  _Nullable x) {
        NSLog(@"(map)映射结果:%@",x);
        /**
         map)映射结果:(
             1,
             2,
             3,
             4,
             5,
             6,
             7,
             8
         )
         */
    }];
flattenMap:信号中信号,signalOfSignals
    RACSignal *subA = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [subscriber sendNext:@[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",]];
        return nil;
    }];
    
    [[subA flattenMap:^__kindof RACSignal * _Nullable(id  _Nullable value) {
        // value:源信号的内容
        value = [NSString stringWithFormat:@"####%@",value];
        // 返回值:信号,把处理完的值包装成信号返回出去(信号中的信号)
        return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            [subscriber sendNext:value];
            return nil;
        }];
        
    }] subscribeNext:^(id  _Nullable x) {// 订阅
        // x:绑定信号的值
        NSLog(@"订阅的值:%@",x);
        //输出的结果
        /*订阅的值:####(
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
        )
         */
    }];

FlatternMap与Map的区别:

\color{#FF7100}{1.FlatternMap中的Block返回的是信号;}
\color{#FF7100}{2.Map中的Block返回的是数据对象;}
\color{#FF7100}{3.信号发出的值不是信号,一般使用Map映射;}
\color{#FF7100}{4.信号发出的值是信号,一般使用FlatternMap映射;}

欢迎大佬儿来指正纠错,共同学习

上一篇下一篇

猜你喜欢

热点阅读