美文网首页
7.rac高级用法认知

7.rac高级用法认知

作者: AYangGo | 来源:发表于2017-07-22 15:10 被阅读0次

    1.   flatMap.    map

    1.1flatMap操作在返回的时候,返回的是一个信号,而map返回的是一个值,map底层调用是flatMap,flatMap底层调用是bind函数,个人觉得这两个函数的作用就是拦截,hook(钩子思想),如果想在一个信号被接收之前对信号中的值进行修改,这时候就可以用这两个函数,一般来说flatMap不常用,map常用;而且要认识到,只要是信号,这两个函数都能拦截

    2.rac中的集合

    array.rac_sequence.signal 每一个集合都会有一个信号,当订阅这个信号的时候,就会遍历;用map也一样,也是需要订阅才会调用,map只是起到了一个拦截的作用

    3.高级宏

    RAC(self.label,text) = self.tf.rac_textSignal;绑定宏,用于将一个对象的属性和一个信号绑定起来

    3.元组

    RACTuple *tuple = RACTuplePack(@1,@2,@3,@4);

    NSLog(@"%@ %@ %@ %@",tuple[0],tuple[1],tuple[2],tuple[3]);

    元组就相当于把好几个对象打包成一个集合,然后根据下标值来取,这样就可以有多个返回值

    4.contact 

    一个信号contact另一个信号,会形成一个新的信号,同时只有在第一个信号发送完成后sendCompleted,才会去监听第二个信号

    5.then

    按顺序来监听信号,而且只能获得最后一个信号的值,

    [[[subject1 then:^RACSignal * _Nonnull{

    return subject2;

    }] then:^RACSignal * _Nonnull{

    return subject3;

    }] subscribeNext:^(id  _Nullable x) {

    NSLog(@"%@",x);

    }];

    而且上一个信号必须sendCompleted,按上面来看就是能够解决嵌套问题,使代码看起来更好看,也更容易理解,比如有三个请求方法,同时设置三个信号属性,然后就可以用then来按顺序来拿取各个请求返回的数据;还有一种需求就是,第一个请求的数据是不需要展示的,但是第一个请求的数据是第二个请求的参数,第二请求的数据是要展示的,这样就可以用then,当然contact也可以

    6.merge合并

    [[self.subject2 merge:self.subject3] subscribeNext:^(id  _Nullable x) {

    }

    只要任何一个信号发送就会调用,无序,并且也不用发送sendCompleted,如果想要将两个或多个信号的值在一处处理,那么就用这个方法

    7.zip 合并信号,将信号发出的值变成元组,一般用于两个信号的合并,但必须要信号都发送完毕后,才会回调,而且返回值的顺序和压缩的前后顺序一致

    [[signalA zipWith:signalB] subscribeNext:^(id  _Nullable x) {

    RACTupleUnpack(NSString *a,NSString *b) = x;

    NSLog(@"%@ %@",a,b);

    }];

    8.combineLatest

    // combineLatest:任何一个信号,只要改变就能订阅到,这就是它和zip的区别

    // reduce:把多个信号的值,聚合为一个值

    // reduce参数:几个信号,就几个参数,每个参数都是信号发出的值,而且reduce的block的参数值,是由自己来填写的,如果控件属性是由几个信号的值来确定的,那么就用下面的方法

    如果需要操作值的话,那么就需要订阅了

    9.filter过滤

    10.定时器

    相关文章

      网友评论

          本文标题:7.rac高级用法认知

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