ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架
ReactiveCocoa在开发中常见的用法
- Event(按钮的点击)
// 监听事件
// 把按钮点击事件转换为信号,点击按钮,就会发送信号
[[button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
NSLog(@"按钮被点击");
}];
2.KVO观察者
// 监听对象的属性值改变,转换成信号,只要值改变就会发送信号
[[View rac_valuesAndChangesForKeyPath:@"x" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {
NSLog(@"view的x值发生了改变");
}];
3.Notification通知
// 代替通知
// 把监听到的通知转换信号
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(id x) {
NSLog(@"键盘将要出现");
}];
// 通过RAC提供的宏快速实现观察者模式
// RACObserve(self, name):监听某个对象的某个属性,返回的是信号。
[RACObserve(self.greenView,x) subscribeNext:^(id x) {
NSLog(@"绿色view的x方向发生改变");
}];
4.textField的文字信号
// 监听文本框的文字改变
[[_textField rac_textSignal] subscribeNext:^(NSString *x) {
NSLog(@"文本框文字发生了改变:%@",x);
}];
// 通过RAC提供的宏快速实现textSingel的监听
// RAC(TARGET, [KEYPATH, [NIL_VALUE]]):用于给某个对象的某个属性绑定。
// 当textField的文字发生改变时,label的文字也发生改变
RAC(self.textLabel,text) = self.textField.rac_textSignal;
5.手势信号
// 监听手势
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] init];
[[tapGesture rac_gestureSignal] subscribeNext:^(id x) {
NSLog(@"view被触发tap手势");
}];
[self.view addGestureRecognizer:tapGesture];
6.过滤器filter方法的使用
// 过滤器
[[self.textField.rac_textSignal filter:^BOOL(NSString *value) {
return value.length >= 3;
}] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];