MVVM ReactiveCocoaSwift&Objective-CiOS学习笔记

RAC使用场景

2016-08-12  本文已影响405人  karthrine

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当中实现点击事件,通知代理 

3.在控制器中监听按钮事件

二 代替kvo和通知

1和2都是一样的 只不过在用1的时候需要导入 #import"NSObject+RACKVOWrapper.h"

三 监听文本框

四 处理数据

 五 数组嵌套字典转模型

六 网络数据请求

model里面需要加载数据写在这里 在外界拿到数据 更新ui
上一篇 下一篇

猜你喜欢

热点阅读