ReactiveCocoa入门教程之信号的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zyzxrj/article/details/71115067

写在之前

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 信号类-最常见也是最常用的类
1. 创建信号
2. 通过订阅者订阅信号
3. 发送信号

RACDisposable 当信号发送完毕,或者发送失败,帮助我们取消订阅

RACSubscriber是一个协议,也是定阅者-发送信号

RACSubject 继承RACSignal,信号提供者,既可以充当信号,又可以发送信号

猜你喜欢

转载自blog.csdn.net/zyzxrj/article/details/71115067