2-RACommand
2024-05-20 04:59:36
RACommand
RACCommand 就是命令
// RACCommand 就是命令// 0 创建一个CMD 穿进去一个用于构建RACSignal的Block参数来初始化RACommandRACCommand *cmd = [[RACCommand alloc]initWithSignalBlock:^RACSignal * _Nonnull(id _Nullable input) {// 此处是cmd 执行的输入源NSLog(@"%@",input);// 创建一个信号 并且发送信号return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {[subscriber sendNext:@"HelloFromCommand"];return nil;}];}];// 获取信号的发送者 监听信号[cmd.executionSignals subscribeNext:^(id _Nullable x) {// 此处返回的是信号// <RACDynamicSignal: 0x600003963920> name:NSLog(@"%@",x);[x subscribeNext:^(id _Nullable x) {// 此处打印的是信号发送的信息 HelloFromCommandNSLog(@"%@",x);}];}];// cmd 执行execute 方法 才会调用[cmd execute:@"555555"];
// 用户名和密码长度大于6之后才能登陆// 下面两行代码是实时监听输入框的长度 去改变登录按钮的颜色[self.nameFiled.rac_textSignal subscribeNext:^(NSString * _Nullable x) {NSLog(@"%@",x);self.username = x;self.loginBtn.backgroundColor = [UIColor grayColor];if (self.username.length > 6 && self.password.length > 6 ) {self.loginBtn.backgroundColor = [UIColor redColor];}}];[self.passwordField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {NSLog(@"%@",x);self.password = x;self.loginBtn.backgroundColor = [UIColor grayColor];if (self.username.length > 6 && self.password.length > 6 ) {self.loginBtn.backgroundColor = [UIColor redColor];}}];// 观察self.nameFiled.text// 用户名的信号RACSignal *usernameSignal = [RACObserve(self.nameFiled, text) map:^id _Nullable(NSString * value) {if (value.length > 6 ) {return @(YES);}else{return @(NO);}}];// 密码的信号RACSignal *passwordSignal = [RACObserve(self.passwordField, text) map:^id _Nullable( NSString * value) {if (value.length > 6 ) {return @(YES);}else{return @(NO);}}];//信号的合并// combineLatest 是将数组中的信号合并成一个信号 只有当两个信号都成功发送的时候后面的代码才会执行// reduce 聚合:用于信号发出的内容时元组,把信号发出元组的值聚合成一个值RACSignal *loginSig = [RACSignal combineLatest:@[usernameSignal,passwordSignal] reduce:^id (NSNumber *username,NSNumber *pwd){// 返回的是0 或者 1// 只有都符合条件的话 信号才会发出去return @([username boolValue] && [pwd boolValue]);}];// 实例化command_loginCommand = [[RACCommand alloc]initWithEnabled:loginSig signalBlock:^RACSignal * _Nonnull(id _Nullable input) {// 登录的操作return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber> _Nonnull subscriber) {[subscriber sendNext:[NSString stringWithFormat:@"%@--%@",self.nameFiled.text,self.passwordField.text]];[subscriber sendCompleted];return nil;}];return nil;}];// 订阅信号[[self.loginCommand executionSignals]subscribeNext:^(RACSignal * x) {[x subscribeNext:^(NSString * x) {//NSLog(@"x--%@",x);}];}];// 绑定按钮的command 事件self.loginBtn.rac_command = self.loginCommand;
2-RACommand相关推荐
- EJBCA使用之注册用户及创建证书
http://blog.csdn.net/xanxus46/article/details/9103031 分类: ejbca2013-06-15 21:39 199人阅读 评论(0) 收藏 举报 ...
最新文章
- 腾讯58篇论文入选CVPR 2019,两年增长超200%
- 移动数据分析服务使用教程
- mysql数据库支持的锁粒度包括_1. Mysql的并发(锁策略、锁粒度、事务)
- Memcache - 一款图形化memcache监控工具
- QT QSqlTabModel 学习,用于从数据库中存取修改等操作。
- 13KB的代码能做什么?有些人可是弄出了一个完整的游戏!
- Tableau系列之使用日期
- 各种输出函数的比较(printf/fprintf/sprintf/snprintf/vprintf/vfprintf/vsprintf/vsnprintf)
- 从NeurIPS 2018看AI发展路线!
- 从一套表达和通路数据学习常见的绘图展示方式和报错处理
- 华为云严选上新啦!高效准确的数据同步方案来了
- 如何构建OctoberCMS Widget插件
- IGame游戏公司的故事
- 影刀RPA金礼剑:专注打造简单易用的RPA产品,构建差异化市场竞争力 | 数据猿专访...
- 黑石裸金属服务器是什么?有什么产品优势?
- 2021-11-16爬取淘宝商品信息时如何获取cookie
- 二维码背后的隐忧:扫码点单之后,谁从餐桌上拿走了你的信息?
- python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金
- vue+百度地图实现搜索功能
- CSDN文章,知乎回答等网页保存为PDF文件