Warning: Illegal string offset 'top' in /www/wwwroot/dy.11456.top/wp-content/themes/Snape/single.php on line 45
一、简介
ReactiveCocoa 可以说是结合了函数式编程和响应式编程的框架,也可称其为函数响应式编程(FRP)框架,强调一点,RAC 最大的优点是提供了一个单一的、统一的方法去处理异步的行为,包括 delegate
方法, blocks
回调,target-action
机制,notifications
和 KVO。
导入
在项目的 podfile
文件中添加
在使用时导入
二、基本使用
1.button 添加点击事件
2.代替 KVO 监听
3.监听输入变化
4.通知回调
5.手势回调
6.数组和字典遍历
二、宏
1. RAC
RAC(TARGET, [KEYPATH, [NIL_VALUE]])
用于给某个对象的某个属性绑定
2.RACObserve
RACObserve(TARGET, KEYPATH)
监听某个对象的某个属性,返回的是一个信号
3.RACTuplePack
和RACTupleUnpack
RACTuplePack
把数据包装成 RACTuple(元组类),被包装的数据必须是 object 类数据
RACTupleUnpack
把 RACTuple(元组类)解包成对应的数据,解包参数的顺序及数据类型要和包装数据时的顺序及类型保持一致
三、信号组合
1. concat
concat
按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号,依赖关系把一组信号串联起来,前面一个信号 complete
,后面一个信号才开始发挥作用。
2.then
then
用于连接两个信号,当第一个信号完成,才会连接 then
返回的信号。
then 与 concat 区别:then 监听不到第一个信号的值,共同点都是必须第一个信号完成,第二个信号才会激活
3. merge
merge
把多个信号合并为一个信号,任何一个信号有新值的时候就会调用。
4. zipWith
zipWith
把两个信号压缩成一个信号,只有当两个信号同时发出信号内容时,并且把两个信号的内容合并成一个元组,才会触发压缩流的 next 事件。
5. reduce
6.其他
combineLatest
将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的 signal
至少都有过一次 sendNext
,才会触发合并的信号。combineLatestWith
合并两个信号,当两个信号都有 sendNext
才会触发合并的信号。
四、MVVM+RAC
示例如下:
DJViewController
%ignore_pre_17%
%ignore_pre_18%
[self.reqVM.reqCommand execute:nil];
方法为执行reqCommand
事件命令,reqCommand
是DJViewModel
中网络请求事件。[self.reqVM.refreshUISubject subscribeNext:^(id x) { @strongify(self); [self.tableView reloadData]; }];
此方法为订阅DJViewModel
中网络请求完成时发送的信号(refreshUISubject
),也就是说当网络请求完成之后会执行block
中的刷新tableView
方法。
DJViewModel
%ignore_pre_19%
%ignore_pre_20%
refreshUISubject
属性是通知控制器刷新 UI 的信号,其功能类似于代理。reqCommand
属性是网络请求事件,暴露在 .h 文件的原因是让控制器来决定什么时候发起事件,也就是说什么时候发起网络请求。or_initialize
中第一个方法是订阅reqCommand
(网络请求)事件中的信号发出的值,也就是网络请求成功后发送的数据。第二个方法的功能是监听reqCommand
事件过程,其block
中的值返回 YES 是,代表事件正在执行,所以在这里面可以加一个正在加载的菊花,当返回值为 NO 时,代表事件执行完成,把正在加载菊花去掉。- 懒加载
- (RACCommand *)reqCommand
方法中就是网络请求事件,block
里面的signal
信号作用是把网络请求的数据发送给or_initialize
中第一个方法的订阅者。订阅者拿到数据后执行字典转模型操作,然后发送暴露在 .h 文件中的refreshUISubject
信号给订阅此信号的控制器,通知他刷新tableView
。
DJViewModel、DJTableViewCell
%ignore_pre_21%
%ignore_pre_22%
%ignore_pre_23%
%ignore_pre_24%
Warning: Illegal string offset 'footer' in /www/wwwroot/dy.11456.top/wp-content/themes/Snape/single.php on line 49