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 文件中添加

%ignore_pre_1%

在使用时导入

%ignore_pre_2%

二、基本使用

1.button 添加点击事件

%ignore_pre_3%

2.代替 KVO 监听

%ignore_pre_4%

3.监听输入变化

%ignore_pre_5%

4.通知回调

%ignore_pre_6%

5.手势回调

%ignore_pre_7%

6.数组和字典遍历

%ignore_pre_8%

二、宏

1. RAC

RAC(TARGET, [KEYPATH, [NIL_VALUE]])用于给某个对象的某个属性绑定

%ignore_pre_9%

2.RACObserve

RACObserve(TARGET, KEYPATH)监听某个对象的某个属性,返回的是一个信号

3.RACTuplePackRACTupleUnpack

RACTuplePack数据包装成 RACTuple(元组类),被包装的数据必须是 object 类数据

%ignore_pre_10%

RACTupleUnpack把 RACTuple(元组类)解包成对应的数据,解包参数的顺序及数据类型要和包装数据时的顺序及类型保持一致

%ignore_pre_11%

三、信号组合

1. concat

concat按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号,依赖关系把一组信号串联起来,前面一个信号 complete,后面一个信号才开始发挥作用。

%ignore_pre_12%

2.then

then用于连接两个信号,当第一个信号完成,才会连接 then 返回的信号

%ignore_pre_13%

then 与 concat 区别:then 监听不到第一个信号的值,共同点都是必须第一个信号完成,第二个信号才会激活

3. merge

merge 把多个信号合并为一个信号,任何一个信号有新值的时候就会调用。

%ignore_pre_14%

4. zipWith

zipWith两个信号压缩成一个信号,只有当两个信号同时发出信号内容时,并且把两个信号内容合并成一个元组,才会触发压缩流的 next 事件。

%ignore_pre_15%

5. reduce

reduce信号聚合,参数需要自己添加

%ignore_pre_16%

6.其他

combineLatest将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的 signal 至少都有过一次 sendNext,才会触发合并的信号
combineLatestWith 合并两个信号,当两个信号都有 sendNext 才会触发合并的信号

四、MVVM+RAC

示例如下:

DJViewController

%ignore_pre_17%
%ignore_pre_18%

  • [self.reqVM.reqCommand execute:nil]; 方法为执行 reqCommand 事件命令,reqCommandDJViewModel 中网络请求事件。
  • [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