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相关推荐

  1. EJBCA使用之注册用户及创建证书

     http://blog.csdn.net/xanxus46/article/details/9103031 分类: ejbca2013-06-15 21:39 199人阅读 评论(0) 收藏 举报 ...

最新文章

  1. 腾讯58篇论文入选CVPR 2019,两年增长超200%
  2. 移动数据分析服务使用教程
  3. mysql数据库支持的锁粒度包括_1. Mysql的并发(锁策略、锁粒度、事务)
  4. Memcache - 一款图形化memcache监控工具
  5. QT QSqlTabModel 学习,用于从数据库中存取修改等操作。
  6. 13KB的代码能做什么?有些人可是弄出了一个完整的游戏!
  7. Tableau系列之使用日期
  8. 各种输出函数的比较(printf/fprintf/sprintf/snprintf/vprintf/vfprintf/vsprintf/vsnprintf)
  9. 从NeurIPS 2018看AI发展路线!
  10. 从一套表达和通路数据学习常见的绘图展示方式和报错处理
  11. 华为云严选上新啦!高效准确的数据同步方案来了
  12. 如何构建OctoberCMS Widget插件
  13. IGame游戏公司的故事
  14. 影刀RPA金礼剑:专注打造简单易用的RPA产品,构建差异化市场竞争力 | 数据猿专访...
  15. 黑石裸金属服务器是什么?有什么产品优势?
  16. 2021-11-16爬取淘宝商品信息时如何获取cookie
  17. 二维码背后的隐忧:扫码点单之后,谁从餐桌上拿走了你的信息?
  18. python中selenium(模拟登陆)+pytesseract(自动识别验证码)应用例子之查询住房公积金
  19. vue+百度地图实现搜索功能
  20. CSDN文章,知乎回答等网页保存为PDF文件

热门文章

  1. [SDOI2009]HH的项链
  2. [bzoj1054][HAOI2008]移动玩具
  3. iOS常用动画 类封装
  4. JUnit基础及第一个单元测试实例(JUnit3.8)
  5. PHP autoload 函数
  6. PHP Webservice的发布与调用
  7. Linux内核模块编程入门
  8. 使用嵌套的Repeater控件显示分级数据
  9. 数据竞争(data race)问题分析的利器——valgrind的Helgrind
  10. Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(Python)