一、RAC是什么?
1、RAC全称:ReactiveCocoa, Github 一个开源框架!!
2、ReactiveCocoa:函数响应编程框架!! (Reactive:响应。Cocoa:苹果开发中所有框架的总称。)
3、作用:帮助我们更简单霸气的处理事件!!
总结:RAC是一套super重量级函数响应编程开源框架,它可以帮助我们简单粗暴的处理事件!!!
一张图让你全面认识RAC👇
二、RAC的四大家族
1、Cocoa:包含了OC和swift代码
2、ObjC:纯OC代码建议使用(本文使用的框架)
3、Swift:纯swift的代码就可以使用它了
4、Bridge:OC和swift混编就要用到它了
建议:我们比较常见的就是Cocoa,但是如果是纯OC的代码,还是建议使用ObjC,至于纯Swift建议不要使用Swift,据传说是因为很难用。
三、集成ReactiveObjC框架
使用CocoaPads来集成,没有环境的,或者不会搭建环境的,可以自己去百度一下
四、开始最简单的使用ReactiveObjC
1、我们先认识一下RAC里最常见和常用的类:RACSignal(信号类)
– 通过RACSignal创建一个信号!! (默认是: 冷信号!!)
– 通过订阅者!订阅这个信号!(变成: 热信号!!)
– 发送信号!!
以上就是信号三部曲,下面我们来看代码的实现:
1.1、创建信号
1 2 3 4 5 |
//1.创建信号(冷信号!) RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { NSLog(@"Here I am!"); return nil; }]; |
1.2、订阅信号
1 2 3 4 5 |
//2.订阅信号(热信号!!) [signal subscribeNext:^(id x) { //x:信号发送的内容!! NSLog(@"%@",x); }]; |
1.3、发送信号
1 2 3 4 5 |
RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { //3.发送数据subscriber它来发送 [subscriber sendNext:@"发送信号就在创建信号里面"]; return nil; }]; |
不难发现上面有两个block,经过测试总结如下:
第一个(创建信号)block:是在订阅信号时被调用,如果不订阅信号的话,就永远不会被调用。
第二个(订阅信号)block:是在发送信号时被调用,如果不发送信号的话,也是不会被调用的。
我说你就信,必须的!!!
送你一张流程图
2、实际开发中如何使用ReactiveObjC
2.1、UITextField
1 2 3 4 5 6 |
@weakify(self); [[self.testTextFileld rac_textSignal] subscribeNext:^(NSString * _Nullable x) { @strongify(self); NSLog(@"%@",x); self.testTextFileld.text = @"Hello"; }]; |
监听了输入框内所有的变化,包括准备编辑,和退出编辑。再也不用写delegate了,编码起来方便快捷!!!
2.2、UIButton
1 2 3 |
[[self.btn rac_signalForControlEvents:(UIControlEventTouchUpInside)] subscribeNext:^(__kindof UIControl * _Nullable x) { NSLog(@"%@",[x class]); }]; |
2.3、NSNotificationCenter
1 2 3 |
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) { NSLog(@"%@",x); }]; |
还能监听通知的各种事件,上面就是监听了APP退到后台的事件。最重要的一点就是不需要移除通知,比通知用起来更爽,无后顾之忧!!!