RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据。
信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出。
默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发。
订阅信号:调用信号RACSignal的subscribeNext就能订阅。
RACSiganl底层实现:
1.创建信号,首先把didSubscribe保存到信号中,还不会触发。
2.当信号被订阅,也就是调用signal的subscribeNext:nextBlock
2.1 subscribeNext内部会调用siganl的didSubscribe
2.2 subscribeNext内部会创建订阅者subscriber,并且把nextBlock保存到subscriber中
3.siganl的didSubscribe中调用[subscriber sendNext:@1];
3.1 sendNext底层其实就是执行subscriber的nextBlock
RACSubscriber:表示订阅者的意思,用于发送信号,这是一个协议,不是一个类,只要遵守这个协议,并且实现方法才能成为订阅者。通过create创建的信号,都有一个订阅者,帮助他发送数据。
RACDisposable:用于取消订阅或者清理资源,当信号发送完成或者发送错误的时候,就会自动触发它。
使用场景:不想监听某个信号时,可以通过它主动取消订阅信号。
RACSubject:RACSubject:信号提供者,自己可以充当信号,又能发送信号。
使用场景:通常用来代替代理,有了它,就不必要定义代理了。
RACReplaySubject:重复提供信号类,RACSubject的子类。
RACReplaySubject与RACSubject区别:
RACReplaySubject可以先发送信号,在订阅信号,RACSubject就不可以。
一.代替代理
当在一个cell里面有很多button,要用代理或者block的方式传出给控制器再进行跳转,有了rac只需要一下几步
在cell中注册代理
1.@property (nonatomic, strong) RACSubject *delegateSignal;
2.cell当中实现点击事件,通知代理
![](https://img.haomeiwen.com/i2065982/919cca2d18d5f296.png)
3.在控制器中监听按钮事件
![](https://img.haomeiwen.com/i2065982/0ad686a5e96e18d7.png)
二 代替kvo和通知
![](https://img.haomeiwen.com/i2065982/f7cd7d47c9dad4f3.png)
1和2都是一样的 只不过在用1的时候需要导入 #import"NSObject+RACKVOWrapper.h"
三 监听文本框
![](https://img.haomeiwen.com/i2065982/7cabce5a2451fd7f.png)
四 处理数据
![](https://img.haomeiwen.com/i2065982/ac90cc90fa86bd09.png)
五 数组嵌套字典转模型
![](https://img.haomeiwen.com/i2065982/aa4ee7de0384414e.png)
六 网络数据请求
![](https://img.haomeiwen.com/i2065982/e54fc111e76dc37b.png)
![](https://img.haomeiwen.com/i2065982/04460b994fc710bc.png)
网友评论