写在之前
ReactiveCocoa是什么,它是Github上的一个开源的函数响应式编程框架,下面简称RAC
他的作用是帮我们很简单的处理事件,这里要注意,目前RAC有针对oc跟swift两个类库,OC对应的是ReactiveObjC,swift对应的则是ReactiveCocoa,目前已经是5.0.0
版本。
虽然我公司项目已经使用swift进行开发,但是考虑到还有部分没有使用因此这边围绕OC语言版本展开描述。
因为RAC框架中对于block的大量使用,对block不熟悉的同学可以先补课一波。
1、导入ReactiveObjC
这里使用CocoaPods导入,假设大家已经安装好了CocoaPods,没装的自行百度呀。新建简单工程,cd到工程跟目录下,然后Podfile文件内容如下:
use_frameworks!
platform :ios, "8.0"
target '002--RAC' do
pod 'ReactiveObjC'
end
这里注意,002--RAC==要换成你新建的工程名称==
2、创建信号并发送数据
在RAC里面,一切皆信号,信号可以发送数据,接收数据
//1、创建信号,刚创建的时候是冷信号
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {
//3、订阅者发送数据
[subscriber sendNext:@"发送内容"];
_subscriber = subscriber; //这边把订阅者保存下来就不会自动取消订阅
return [RACDisposable disposableWithBlock:^{
//取消订阅信号就会来到这里,清空资源
NSLog(@"取消订阅信号");
}];
}];
//2、订阅信号,这时候变成热信号
//下面这个block只要subscriber发送数据,这边就会调用,可调用多次
RACDisposable *disposable = [signal subscribeNext:^(id _Nullable x) {
//x:信号发送的内容!!
NSLog(@"%@",x);
}];
//这边即使不调用,默认一个信号发送完收据会主动取消订阅
[disposable dispose]; //手动取消订阅
RACSubject的使用:
//1、创建信号
RACSubject *subject = [RACSubject subject];
//2、订阅信号
//这边是可以保存多个订阅者
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"接收到的数据1:%@",x);
}];
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"接收到的数据2:%@",x);
}];
//3.发送数据
//遍历出所有的订阅者,调用nextBlock
[subject sendNext:@"汉堡包"];
分析一下各个类作用:
RACSignal 信号类-最常见也是最常用的类
- 创建信号
- 通过订阅者订阅信号
- 发送信号
RACDisposable 当信号发送完毕,或者发送失败,帮助我们取消订阅
RACSubscriber是一个协议,也是定阅者-发送信号
RACSubject 继承RACSignal,信号提供者,既可以充当信号,又可以发送信号