ReactiveCocoa的运用
在我们iOS开发过程中,当某些事件响应的时候,需要处理某些业务逻辑,这些事件都用不同的方式来处理。
比如按钮的点击使用action,ScrollView滚动使用delegate,属性值改变使用KVO等系统提供的方式。
其实这些事件,都可以通过RAC处理
ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件很方便,可以把要处理的事情,和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里。非常符合我们开发中高聚合,低耦合的思想
在RAC中最核心的类RACSiganl
````objc
//RACSignal信号使用步骤:1:创建信号 2:订阅信号 3: 发送信号
//1:创建信号
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//didSubscribe调用:只有被订阅了,才调用
//didSubscribe作用:发送数据
//3:发送信号
[subscriber sendNext:@1];
return nil;
}];
//2:订阅信号
[signal subscribeNext:^(id x) {
//nextBlock调用:只有发送数据了才会调用
//nextBlock作用:接受数据,展示UI
NSLog(@"%@",x);
}];
RACDisposable
: 用于取消订阅或者清理资源,当信号发送完成或者发送错误的时候,就会自动触发它。
--不想监听某个信号时,可以通过它主动取消订阅信号。
-(void)racWithSignalDisposable{
//1:创建信号
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
_subscriber = subscriber;
//3发送信号
[subscriber sendNext:@1];
return [RACDisposable disposableWithBlock:^{
NSLog(@"取消订阅");
}];
}];
//2:订阅信号
RACDisposable *disposable = [signal subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
//主要订阅者在就不会取消订阅者
[disposable dispose];
}
RACSubject:RACSubject:
信号提供者,自己可以充当信号,又能发送信号。
使用场景:通常用来代替代理,有了它,就不必要定义代理了。
1.要在自定义的类(RedView)中,添加
RACSubject属性,再在 redView 中
添加一个按钮,按钮点击发送消息
2.控制器中添加 RedView ,按钮点击之后,redView会收到消息
-(RACSubject *)subject{
if (_subject == nil) {
_subject = [RACSubject subject];
}
return _subject;
}
-(IBAction)clickBtn:(UIButton *)btn{
[self.subject sendNext:@1];
}
-(void)racWithDelegate{
//订阅
[_redView.subject subscribeNext:^(id x) {
NSLog(@"控制器做了一件事情%@",x);
}];
}