7.rac高级用法认知

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过滤


7.rac高级用法认知_第1张图片

10.定时器

7.rac高级用法认知_第2张图片

你可能感兴趣的:(7.rac高级用法认知)