ReactiveCocoa常见用法练习
2017-09-20 15:53
295 查看
#pragma mark - RAC Text3 - (void)RACText3 { /******************************************************************************** 1⃣️.rac_signalForSelector(替换代理,监听点击事件) rac_signalForSelector用于监听某个对象调用某个方法,只要对象调用方法就会产生一个信号; ********************************************************************************/ [_turnBtn addTarget:self action:@selector(turnAction:) forControlEvents:UIControlEventTouchUpInside]; RACSignal *signal = [self rac_signalForSelector:@selector(turnAction:)]; [signal subscribeNext:^(id _Nullable x) { NSLog(@"调用了跳转"); }]; /******************************************************************************** 2⃣️.代替KVO rac_valuesAndChangesForKeyPath用于监听某个对象的属性改变 ********************************************************************************/ // 监听按钮的选择状态属性 [_turnBtn rac_observeKeyPath:@"selected" options:NSKeyValueObservingOptionNew observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) { // 只要监听的属性一改变调用 NSLog(@"------状态改变"); }]; /******************************************************************************** 3⃣️.rac_signalForControlEvents监听事件 ********************************************************************************/ // 按钮产生一个事件,就会产生一个信号 [[_btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) { NSLog(@"按钮被点击"); }]; _btn.rac_command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) { NSLog(@"点击按钮"); return [RACSignal empty]; }]; /******************************************************************************** 4⃣️.rac_addObserverForName代替接收通知 ********************************************************************************/ RACSignal *signal2 = [[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil]; [signal2 subscribeNext:^(id _Nullable x) { NSLog(@"键盘即将出现"); }]; /******************************************************************************** 5⃣️.rac_textSignal监听文本框文字变化 只要文本框发生改变就会发出信号 ********************************************************************************/ [_textFiled.rac_textSignal subscribeNext:^(NSString * _Nullable x) { // textFiled中输入的文字 NSLog(@"%@",x); }]; /******************************************************************************** 6⃣️.处理页面有多个请求时,需要全部获取到数据,才能展示界面 ********************************************************************************/ RACSignal *requestSignal1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { // 第一个网络请求 NSLog(@"在这里进行第1个网络请求"); // 请求到数据之后发送出去 [subscriber sendNext:@"数据1"]; return nil; }]; RACSignal *requestSignal2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) { // 第二个网络请求 NSLog(@"在这里进行第2个网络请求"); // 请求到数据之后发送出去 [subscriber sendNext:@"数据2"]; return nil; }]; /* 只有当两个网络请求都完成之后才会调用 4000 selector @selector注意点: 参数根据信号数组元素决定 调用的方法的参数类型与信号组发出的数据的类型要一致,即data1->requestSignal1,data2->requestSignal2 */ [self rac_liftSelector:@selector(reciveDataWithData1:data2:) withSignalsFromArray:@[requestSignal1,requestSignal2]]; } - (void)reciveDataWithData1:(NSString *)data1 data2:(NSString *)data2 { NSLog(@"%@-%@",data1,data2); } - (void)turnAction:(UIButton *)btn { btn.selected = !btn.selected; NSLog(@"跳转"); }
相关文章推荐
- ReactiveCocoa之常见用法(二)
- ReactiveCocoa的常见用法和常用宏
- ReactiveCocoa之常见用法(二)
- iOS-ReactiveCocoa常见宏
- ReactiveCocoa 用法实例
- ReactiveCocoa框架菜鸟入门——信号(Signal)详解 第五课:适合给新手看的RAC用法总结
- ReactiveCocoa常见操作方法介绍/MVVM架构思想
- ReactiveCocoa 基本用法
- 链表常见操作练习
- C++ List 常见用法全解(代码版)
- 2018年全国多校算法寒假训练营练习比赛(第五场) C 字符串的问题(substr,find的用法)
- Linux find常见用法示例
- ReactiveCocoa之RAC宏展开解析【iOS源码阅读】
- Linux find常见用法例子
- linux—find指令常见用法示例
- iOS开发多线程篇—GCD的常见用法
- ReactiveCocoa & MVVM 学习总结一
- json解析的一些常见用法
- 避免常见的6种HTML5错误用法
- CocoaPods 安装 使用及常见错误