RAC就是一个第三方库,他可以大大简化你的代码过程。
官方的说,ReactiveCocoa(其简称为RAC)是由GitHub开源的一个应用于iOS和OS X开发的新框架。RAC具有函数式编程和响应式编程的特性。
配置RAC环境
我习惯用cocoapods来安装github上得开源库,不会的新手iOS开发者有兴趣可以去学一下。
- 进入终端,建立 Podfile,并且输入以下内容
# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
# Uncomment this line if you're using Swift use_frameworks!
pod 'ReactiveCocoa', '~> 4.0.4-alpha-4'
想学习cocoapods请点击cocoapods的使用。
一、响应式编程就是实时响应某个事件
// 创建信号
RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {
NSLog(@"Hello");
// 发送信号
[subscriber sendNext:@"This is RAC"];
return nil;
}];
// 订阅信号
[signal subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
二、RAC很强大,一行代码搞定以前的事件监听
举几个实际使用案例
TargetAction转Block
举几个实际使用案例TargetAction转Block
①UITextField(实时监听输入框内容)
[[self.textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
NSLog(@"%@", x);
}];
②UIButton(Button点击事件)
[[self.button rac_signalForControlEvents:(UIControlEventTouchUpInside)] subscribeNext:^(__kindof UIControl * _Nullable x) {
NSLog(@"%@",x);
}];
- 通知转Block
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidBecomeActiveNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) {
NSLog(@"%@",x);
}];
三、注意事项:
RAC使用@weakify(self);和@strongify(self);来避免block循环引用
@weakify(self);
[[self.textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
@strongify(self);
self.textField.text = @"Hello";
}];