简介
ReactiveCocoa(简称为RAC)被称为函数响应式编程框架FRP(Functional Reactive Programming),是GitHub开源的。
作用
处理编程时的所有事件(Action、delegate、KVO、通知等)同时使代码更加内聚
处理方式
事件包装为信号,订阅者订阅信号,事件发生时通知订阅者
使用
一、RACSignal
执行顺序:创建信号、订阅信号、发送者发送信号、订阅者接收信号
1.导入头文件
2.创建信号
RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
[subscriber sendNext:@"123"];//发送者发送信号
return nil;
}];
3.订阅信号
[signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);//订阅者接收到发送者发送的信号
}];
4.源码解析如下图
5.简写方式
[[RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
[subscriber sendNext:@"123"];//发送信号
return nil;
}] subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);//接收到发送者发送的信号
}];
二、事件处理
1.按钮事件
UIButton * button = [UIButton buttonWithType:(UIButtonTypeCustom)];
[button setTitle:@"按钮" forState:(UIControlStateNormal)];
button.frame = CGRectMake(40, 80, 100, 100);
[self.view addSubview:button];
[[button rac_signalForControlEvents:(UIControlEventTouchUpInside)] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@"按钮点击时,此处实时响应,是将按钮的target事件封装为信号");
}];
2.TextField实时监听事件
UITextField * textField = [[UITextField alloc] init];
textField.frame = CGRectMake(10, CGRectGetMaxY(button.frame) + 20, self.view.frame.size.width - 20, 44);
[self.view addSubview:textField];
[[textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"随着键盘的输入,此处可以实时打印键盘的输入值");
}];
3.通知事件
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"通知名" object:nil] subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"接受到通知时的事件响应");
}];
4.KVO事件
[[self.view rac_valuesAndChangesForKeyPath:@"backgroundColor" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {
NSLog(@"x:%@", x);
}];
代码
文章中的代码都可以在我的GitHub ReactiveDemo找到
下一篇