ReactiveCocoa学习之创建信号

ReactiveCocoa一个 iOS 中的函数式响应式编程框架,简称RAC,RAC关键解决的问题是开发中经常回见的“低聚合,高耦合”问题。在RAC出现之前,我们编写iOS代码,大部分都是在响应一些事件:按钮点击、接收网络消息、属性变化等等。但处理事件的形式在苹果官方API中却有好几种:如target-action、代理方法、KVO、回调或其它。以上这几种,往往在一个项目中基本都会使用到,在不同的地方会出现很多处理事件的形式,这就带来了不能很好统一管理问题。因此,我们想,有没有一个统一管理解决方案呢?这个方案又是怎样的呢?到这里ReactiveCocoa就该粉墨登场了,它出现的目的就是为了解决统一标准去管理代码中的事件。


RAC在使用时,通过“信号”来传递信息,使用信号的三部曲:1.创建信号,2.订阅信号,3.发送信号;

下面具体看下几种信号类的使用:

一、RACSignal,这是所有信号类的父类

//1创建信号

RACSignal *signal = [RACSignal createSignal:^RACdisposable *(id<RACSubscriber> subscriber) {

//3发送信号

[subscriber sendNext:@"111"];

[subscriber sendNext:@"111"];

returnnil;

}];

//2订阅信号,必须先订阅才能发送

[signal subscribeNext:^(id x) {

NSLog(@"%@",x);

}];

二、RACSubject

//1创建信号

RACSubject *subject = [RACSubject subject];

//2订阅信号

//不同信号订阅方式不一样,RACSubject处理订阅:仅仅是保存订阅

[subject subscribeNext:^(id x) {

NSLog(@"订阅者一接收到数据");

}];

//3.发送数据

[subject sendNext:@"9999"];


三、 RACReplaySubject, RACReplaySubject 可以先发送信号,在订阅信号( 2 3 顺序可以调换)

//1创建信号

RACReplaySubject *subject = [RACReplaySubject subject];

//2订阅信号

[subject subscribeNext:^(id x) {

NSLog(@"%@",x);

}];

//3发送信号

[subject sendNext:@"yyyyy"];


上面就是常用的三种信号类,我们实际开发中多数使用前两种。

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...