函数响应式编程—ReactiveCocoa 使用入门
来源:互联网 发布:淘宝开店后怎么进货 编辑:程序博客网 时间:2024/05/21 19:44
安装ReactiveCocoa
新建一个OC工程,用终端进入工程目录,使用CocoaPods安装ReactiveCocoa。搭建一个简单的登陆界面
把需要用到的空间拉成属性。准备工作就算完成了
@property (weak, nonatomic) IBOutlet UITextField *nameTextField;@property (weak, nonatomic) IBOutlet UITextField *passwordTextField;@property (weak, nonatomic) IBOutlet UIButton *loginBtn;
- 1.初步了解一下
首先添加头文件
#import <ReactiveCocoa/ReactiveCocoa.h>
然后在ViewController里添加如下代码。
[self.nameTextField.rac_textSignal subscribeNext:^(id x) { NSString *str = (NSString*)x; NSLog(@"%@",str); }];
上面的代码就是reactiveCocoa最基本的应用。可以看到,每当你输入一个字符,都会把当前的文本打印出来,不需要代理,多么简洁。
self.nameTextfield.rac_textSignal : 产生了一个文本信号,输出的信号是text文本。由于可以确定输出的信号是字符串,所以可以把(id x)改成(NSString *str)
subscribeNext 接收前面传入的信号。
2.判断输入的字符是否符合一定要求,比如长度大于3,把文本打印出来
[[self.nameTextField.rac_textSignal filter:^BOOL(NSString *str) { return str.length>3; }] subscribeNext:^(NSString *x) { NSLog(@"%@",x); }];
上面的代码,只有你输入的字符长度超过了3,才会打印字符串。可以看到,和1比起来,多了一个filter,你可以把这个想象成一个过滤网。对于前面传过来的文本信号,要经过filter的判断,符合要求,那么信号就可以往下一级传递。
3.map 信号转换
[[[self.nameTextField.rac_textSignal map:^id(NSString *value) { return @(value.length); }] filter:^BOOL(NSNumber *value) { return [value intValue]>3; }] subscribeNext:^(NSNumber *x) { NSLog(@"%@",x); }];
map: 可以把前面传来的数据类型转换成其他我们需要的类型。
在上面的代码中 最开始的文本信号发送给map,map方法把文本信号转换成NSNumber类型,传给filter判断(filter的传入的变量变成了NSNumber)。filter判断成功后让map产生的信号通过,进入subscribeNext。整个信号传递的过程就是这样的。
4.输入有效的时候,改变相应输入框的背景色
RACSignal *nameTextFieldSignal = self.nameTextField.rac_textSignal;//生成一个单独的信号 RAC(self.nameTextField,backgroundColor) = [nameTextFieldSignal map:^id(NSString* value) { return value.length>3?[UIColor yellowColor]:[UIColor whiteColor]; }];
ReactiveCocoa 提供了一个宏(RAC(TARGET, …))来更好的完成上面的事情。RAC有两个参数,第一个是目标对象,第二个是属性名,每次型号产生一个next事件,传递过来的值都会应用到该对象上。
5.两个信号合并
分别生成两个单独的信号,然后合并这两个单独的信号,根据合并后的信号来处理业务逻辑。
//两个信号RACSignal *nameSignals = self.nameTextField.rac_textSignal; RACSignal *passwordSignal = self.passwordTextField.rac_textSignal; //改变背景色 RAC(self.nameTextField,backgroundColor) = [nameSignals map:^id(NSString* value) { return value.length>3 ? [UIColor yellowColor]:[UIColor whiteColor] ; }]; RAC(self.passwordTextField,backgroundColor) = [passwordSignal map:^id(NSString* value) { return value.length>3 ? [UIColor yellowColor]:[UIColor whiteColor] ; }];//合并两个信号 RACSignal *twoSignals = [RACSignal combineLatest:@[nameSignals,passwordSignal] reduce:^id(NSString *name,NSString* password){ return @((name.length>3)&&(password.length>3)); }];// 合并后的信号输出 [twoSignals subscribeNext:^(NSNumber *x) { self.loginBtn.enabled = [x boolValue]; }];
- 函数响应式编程—ReactiveCocoa 使用入门
- 函数式、响应式编程 - ReactiveCocoa 快速入门
- iOS函数响应式编程以及ReactiveCocoa的使用
- ReactiveCocoa RAC 响应式函数编程(FRP)
- 响应式编程框架ReactiveCocoa介绍与入门
- ReactiveCocoa 函数响应式编程简介 链式编程 函数式编程 响应式编程
- 函数式响应式编程框架ReactiveCocoa总结
- 【iOS架构】iOS ReactiveCocoa函数响应式编程
- 函数响应式编程(FRP)框架--ReactiveCocoa
- 函数响应式编程(FRP)框架--ReactiveCocoa
- 函数响应式编程(FRP)与 ReactiveCocoa
- 使用ReactiveCocoa实现iOS平台响应式编程
- 使用ReactiveCocoa实现iOS平台响应式编程
- IOS响应式编程框架ReactiveCocoa(RAC)使用示例
- 使用ReactiveCocoa实现iOS平台响应式编程
- IOS响应式编程框架ReactiveCocoa(RAC)使用示例
- IOS响应式编程框架ReactiveCocoa(RAC)使用示例
- IOS响应式编程框架ReactiveCocoa(RAC)使用示例
- Qt Installer Framework的学习(三)
- 【学习笔记】HBuilder状态栏隐藏显示及颜色
- 复杂分支结构逆向(基础)
- Storm Grouping机制详解(包含两篇参考资料)
- 库函数与系统调用的联系与区别
- 函数响应式编程—ReactiveCocoa 使用入门
- log4net根据级别把日志写入不同文件
- leetcode第13题——*Roman to Integer
- 黑马程序员_编码
- System V 的 IPC -- 线程通信机制
- iOS开发的一些奇巧淫技
- Spring事务学习
- leetcode刷题,总结,记录,备忘 241
- uiAutoMator 自动化测试创建步骤