iOS RAC: https://www.jianshu.com/p/cd4031fbf8ff
1监听方法的调用:运行时的消息拦截
[[self.redView rac_signalForSelector:@selector(btnClick:)] subscribeNext:^(RACTuple * _Nullable x) {
NSLog(@"%@",x);
}];
2监听值得变化:
[_phoneNumberTextField rac_textSignal] : 动态监听文本框内容
RACObserve(_phoneNumberTextField, text):文本框失去焦点才监听到变化;
//方法1: 更多选项设置,在有新值的时候才监听到
[_redView rac_observeKeyPath:@"frame" options:NSKeyValueObservingOptionNew observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { NSLog(@"1 - %@",value); }];
//方法2
[[_redView rac_valuesForKeyPath:@"frame" observer:nil] subscribeNext:^(id _Nullable x) {
NSLog(@"2 - %@",x);
}];
//方法三
[RACObserve(_redView, frame) subscribeNext:^(id _Nullable x) {
NSLog(@"3 - %@",x);
}];
3监听点击事件
[[_btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) { NSLog(@"%@",x); }];
4通知
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardDidShowNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"%@",x);
}];
5UITextField
[_textField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
NSLog(@"%@",x);
}];
//简单使用 RAC(对象,对象的属性) = (一个信号);
RAC(_label,text) = _textField.rac_textSignal;
6 代替代理:用流的方式传送数据
RACSubject 可以自己定义发送signal的时间
RAC能节省时间的:通知,协议,UITextField,点击事件(回调代码不多可用),监听值的变化
- 目前来看没看出简单一些;
4 RAC进阶 + MVVM
视图(View):用户界面
模型(Model):数据存储
ViewModel:数据请求, 数据处理, 业务逻辑。
- MVVM将ViewController视作View
- 在View和Model之间没有紧密的联系,一般的与View是一对一的关系。ViewModel与View之间是双向交互的
- 使用 MVVM 最舒服的姿势是搭配现在已经比较成熟的 ReactiveCocoa
学习RAC和Block:
RAC的学习,需要Block的强强结合:强引用和引用的区别
- 一切都是流
已经完成:
RAC:https://www.jianshu.com/p/f068f5783d82
RAC
https://www.jianshu.com/p/f32a4824797e
http://mobile.51cto.com/hot-511365.htm
https://www.cnblogs.com/CoderEYLee/p/6640503.html
https://www.cnblogs.com/CoderEYLee/p/Object-C-0010.html
https://www.jianshu.com/p/0845b1a07bfa
https://www.jianshu.com/p/eae223df2a19
https://www.jianshu.com/p/3beb21d5def2
https://www.jianshu.com/p/f068f5783d82
https://www.jianshu.com/p/064f81e28a28
https://www.jianshu.com/p/cd4031fbf8ff
https://github.com/ReactiveCocoa/ReactiveObjC