美文网首页RAC
ReactiveCocoa入门学习一(RAC集合类)

ReactiveCocoa入门学习一(RAC集合类)

作者: Maple_Xu | 来源:发表于2017-04-28 12:52 被阅读22次

    在上一篇我们了解了RAC的几个常用类 RACSignal、RACDisposable、RACSubscriber、RACSubject、相信大家应该对RAC有了一个基础的认识。

    RAC集合类####

    • RACTuple:元祖

    首先我们来 这样一段代码

        //元祖
        RACTuple * tuple = [RACTuple tupleWithObjectsFromArray:@[@"aaa",@"bbb",@123]];
        NSString * str = tuple[0];
        NSLog(@"%@",str);
    

    相信大家已经猜到了 没错 这里输出就是“aaa”。
    那么RACTuple说白了它就是一个集合,就是一个数组,里面的元素就是存放的我们的OC对象。

    • RACSequence:用于代替NSArray,NSDictionary,可以使用快速的遍历
        //数组
        NSArray * arr = @[@"abc",@"bbb",@123];
        //RAC集合
        RACSequence * requence = [arr rac_sequence];
        //遍历
        RACSignal * signal = [requence signal];
        //订阅信号
        [signal subscribeNext:^(id  _Nullable x) {
            NSLog(@"%@",x);
        }];
    

    在这里我们通过一个数组拿到了一个RAC集合(RACSequence),再通过这个集合创建了一个信号,此时我们订阅了这个信号,猜想一下此时这个信号返回给我们数据应该是什么呢?猜得没错 此时输出的就是

    aaa
    bbb
    123
    

    这样就顺利的遍历了我们的数组。折腾了半天,就遍历了一个数组。有木有感觉很失望!😆😆 再看
    根据RAC链式编程的思想,我们直接可以写成这样。

        //数组
        NSArray * arr = @[@"abc",@"bbb",@123];
        [arr.rac_sequence.signal subscribeNext:^(id  _Nullable x) {
            NSLog(@"%@",x);
        }];
    

    是不是就立马感觉高大上了。这就是将我们链式编程,函数式编程,响应式编程完美的结合。
    那么这是数组,我们再来看一下字典

        //字典
        NSDictionary * dict = @{@"name":@"maple",@"age":@"38"};
        //字典转集合
        [dict.rac_sequence.signal subscribeNext:^(RACTuple* x) {
            NSString * key = x[0];
            NSString * value = x[1];
            NSLog(@"%@%@",key,value);
        }];
    

    在这里 字典 返回的是一个RACTuple(元祖),通过下标去取出我们对应的 key、value,这样感觉是不是很不爽啊,这里我们介绍RAC的一个宏 RACTupleUnpack: 它就是用来解析元祖

        //字典
        NSDictionary * dict = @{@"name":@"maple",@"age":@"18"};
        //字典转集合
        [dict.rac_sequence.signal subscribeNext:^(RACTuple* x) {
            //RACTupleUnpack:用来解析元祖
            //宏里面的参数,传需要解析出来的变量名称
            // = 右边,放需要解析的元祖
            RACTupleUnpack(NSString * key,NSString * value) = x;
            NSLog(@"%@ : %@",key,value);
        }];
    

    这就舒服些了吧

    接下来 我们再看看 数组里面存放字典的解析,将我们的字典数组->模型数组

        NSMutableArray * arr = [NSMutableArray array];
        [dictArr.rac_sequence.signal subscribeNext:^(NSDictionary * x) {
            KFC * kfc = [KFC kfcWithDict:x];
            [arr addObject:kfc];
        }];
    

    我们首先要创建一个空数组,通过模型的一个类方法将我们接收到的数据转成模型,再保存到数组中。
    当然还有更爽的方法,集合的映射:它会将一个集合中的所有元素都映射成一个新的对象!

        //会将一个集合中的所有元素都映射成一个新的对象!
        NSArray * arr = [[dictArr.rac_sequence map:^id _Nullable(NSDictionary * value) {
            //返回模型!!
            return  [KFC kfcWithDict:value];
        }] array];
        NSLog(@"%@",arr);
    

    相关文章

      网友评论

        本文标题:ReactiveCocoa入门学习一(RAC集合类)

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