RAC的进阶了解
2018-04-27 18:31
239 查看
ReactiveCocoa操作思想
运用的是 Hook(钩子) 思想, Hook 是一种用于改变(应用程序接口: 方法)执行结果的技术Hook 用处: 截获API调用技术
Hook 原理: 在每次调用一个API返回结果之前,先执行自己的方法,改变结果的输出
RAC开发方式: RAC 中核心开发方式,也是 绑定 ,之前开发方式是 赋值 , 而用RAC开发,应该把重心放在绑定,也就是创建一个对象的时候,就绑定以后想做的事情,而不是等赋值之后再去做事情
ReactivCocoa核心方法 bind
ReactiveCocoa 操作核心方法是bindReactiveCocoa组合
concat : 按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号。RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@1]; [subscriber sendCompleted]; return nil; }]; RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@2]; return nil; }]; // 把signalA拼接到signalB后,signalA发送完成,signalB才会被激活。 RACSignal *concatSignal = [signalA concat:signalB]; // 以后只需要面对拼接信号开发。 // 订阅拼接的信号,不需要单独订阅signalA,signalB // 内部会自动订阅。 // 注意:第一个信号必须发送完成,第二个信号才会被激活 [concatSignal subscribeNext:^(id x) { NSLog(@"%@",x); }]; ``` # ReactiveCocoa 过滤 * 当文本长度大于5 ,才想要获取文本, __filter__ :一般文本框使用 ``` [ _textfield.rac_textSignal filter:^BOOL(id value) { // value: 源信号的内容 return [value length] > 5 // 返回值,就是过滤条件,只有满足这个条件,才能获取到内容 } subscribeNext:^(id x){ }] ``` * __ignore__ 忽略一些值, __ignoreValue__ 忽略搜有值 * __take__ :可以获取某个信号 * __takeLast__ : 取后面多少个值, 必须发送完成
RACSubject *subject = [RACSubject subject]; [subject take: 2] subscribeNext:^(id x){ }]; <!-- [subject takeLast: 2] subscribeNext:^(id x){ }]; --> [subject sendNext:@"1"]; [subject sendNext:@"2"]; <!--[subject sendCompleted];-->
* __takeUntil__ : 只要传入信号发送完成,或者源信号发送任意数据,就不会再接收源信号的内容 * __distinctUntilChanged :__ ,如果当前的值和上一个值相同,就不会被订阅到 ``` // 虽然这里发送了很多次但是仍然只会收到一份数据 RACSubject *subject = [RACSubject subject]; [[subject distinctUntilChanged] subscribeNext:^(id x){ NSLog(@"%@", x) }]; [subject sendNext:@"1"]; [subject sendNext: @"1"]; ``` * __skip__ , 跳过几个信号 ``` // 表示输入第一次,不会被监听到,跳过第一次发出的信号 [[_textField.rac_textSignal skip:1] subscribeNext:^(id x) { NSLog(@"%@",x); }];
相关文章推荐
- [AS3进阶讨论区] 深入了解AS3 Socket 和TCP
- css 进阶需要了解的技术有---
- Android 进阶学习:Android LayoutInflater原理分析,带你一步步深入了解View(一)
- 全面了解JavaScript对象进阶
- 我的Android进阶之旅------>Android关于TextWatcher的初步了解
- 了解ocssd.bin如何控制RAC节点重启
- 了解Oracle RAC Brain Split Resolution集群脑裂协议
- Android 进阶学习:Android视图绘制流程完全解析,带你一步步深入了解View(二)
- Android 进阶之了解源码——Activity启动
- Android 进阶学习:Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- 总结 php 进阶需要了解的东西
- 菜鸟进阶学堂(一):了解DVI接口
- Android 进阶学习:Android视图绘制流程完全解析,带你一步步深入了解View(二)
- Android 进阶学习:Android自定义View的实现方法,带你一步步深入了解View(四)
- 菜鸟进阶学堂(二):了解TCO认证
- IOS 开发进阶--多线程和网络--多线程的基础知识的了解
- 我的Android进阶之旅------>Android关于ImageSpan和SpannableString的初步了解
- java开发我们需要了解些什么,怎么进阶
- 了解ocssd.bin如何控制RAC节点重启
- Windows Mobile 进阶系列.第一回.真的了解.NET CF吗?