介绍
1.ReactiveObjC github
2.ReactiveObjC
(正式称为ReactiveCocoa
或RAC
)是一个Objective-C
框架,采用了函数式+响应式的编程思想。
3.RAC
里面万物皆信号,对kvo、代理、通知、tagert、timer进行了封装。是我们的代码看上去更加紧凑。使用起来也更加方便
4.由于RAC可阅读性比较差,对于不太熟悉的人学习起来可能需要一定成本,所以团队协作开发在使用时需要谨慎考虑。
5.这篇文章只是对RAC的使用场景做一个介绍,不对里面的实现原理做深入研究
使用场景
首先导入#import <ReactiveObjC.h>
通知
1.以前我们写注册完通知后,还需要写一个接受的方法,还需要在delloc
removeObserver
里面,但是使用RAC
后,只需要一行代码就搞定
//通知
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil]subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"键盘信息:%@",x.userInfo);
}];
KVO
以前我们监听属性,可能需要调用三个方法,并且方法还很分散
[self.name addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:NULL];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context{
}
- (void)dealloc{
[self removeObserver:self forKeyPath:@"name"];
}
使用RAC后
[RACObserve(self, name) subscribeNext:^(id _Nullable x) {
}];
或者
[[self.name rac_valuesForKeyPath:@"name" observer:self] subscribeNext:^(id _Nullable x) {
}];
代理
self.textField.delegate = self;
[[self rac_signalForSelector:@selector(textFieldDidBeginEditing:) fromProtocol:@protocol(UITextFieldDelegate)] subscribeNext:^(RACTuple * _Nullable x) {
//RACTuple 可以获取参数
UITextField *txt = (UITextField *)x.first;
}];
taget (UI)
//UIButton
[[self.button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
}];
[[self.textField rac_signalForControlEvents:UIControlEventEditingChanged] subscribeNext:^(__kindof UIControl * _Nullable x) {
UITextField *txt = (UITextField *)x;
NSLog(@"%@",txt.text);
}];