RAC指的就是Reactivecocoa,用于iOS开发和OS开发,是git上面的一个开源框架,可以使用pod直接导入。RAC讲究的是万物皆信号,可替代:代理、通知、Block、KVO以及事件绑定。OC—— ‘ReactiveObjC’,Swift——Reactivecocoa。当前项目使用OC。RAC之前也使用过配合MVVM设计,但是用的功能少。当前公司采用RAC也是配合MVVM,使用的比较多,同事也不是很熟,用的比较乱。所以研究整理RAC使用方法,特此记录。如有不对之处欢迎留言指出。
对应地方导入:<ReactiveObjC/ReactiveObjC.h>
RAC----类目介绍
1,RACSignal:信号类,本身不具备发送信号能力。信号发送携带数据,当数据改变就发送数据。
2,RACSubject:信号类,继承RACSignal,可以手动控制,有发送信号能力。
3,RACReplaySubject:RACSubject子类,可以先发送信号再订阅。
4,RACSubscriber:可以接受发送信号的协议对象,表示信号订阅者。本身是一个协议,不是一个类。
5,RACDisposable:用于取消订阅或者清理资源,当信号发送完成或者发送错误的时候,就会自动触发它。
6,RACCommand:事件类,一般使用此类来进行网络请求,获取数据事件传递。
RAC-----宏介绍
@strongify @weakify注意配对使用,类似强弱转换。解决循环引用问题。独立使用@weakify而在RAC Block中不使用 @strongify 会造成内存泄漏。因为仅用@weakify后,使用的self本非弱化后的self,而是self本身。
RAC(TARGET, …),用于事件绑定,为对象属性指定信号,自动设置给定的键。
RACObserve(TARGET, KEYPATH):创建一个在“TARGET”上观察“KEYPATH”以获取更改的信号,一般用于多个事件绑定之间作为信号。
本人很少使用的宏
RACTuplePack:把数据包装成RACTuple(元组类)。
RACTupleUnpack:把RACTuple(元组类)解包成对应的数据。
RAC:方法关键字段介绍
1,skip:跳过信号 跳过第一次信号。
2,concat:按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号。
3,then:用于连接两个信号,当第一个信号完成,才会连接then返回的信号。
4,merge:把多个信号合并为一个信号,任何一个信号有新值的时候就会接受信号。
5,combineLatest:把多个信号合并为一个信号,所有信号发出新值时才会接受到信号。
6,reduce:用于信号发出的内容是元组,把信号发出元组的值聚合成一个值。
7,filter:过滤信号ignore过滤特定条件,take只接受几次信号。
8,bind:底层方法,操作核心。进行信号绑定,信号发送数据,就能监听到。

用法介绍

RACSignal:创建一个信号

 RACSignal *siganal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {[subscriber sendNext:@"发送数据"];[subscriber sendCompleted]; //数据发送完要调用sendCompleted,信号才会销毁//        NSError *error = [NSError new];//        [subscriber sendError:error];  //error会自动销毁信号return [RACDisposable disposableWithBlock:^{NSLog(@"信号被销毁");}];
}];
[siganal subscribeNext:^(id  _Nullable x) {NSLog(@"%@",x); //接受数据
}];

RACCommand: 创建

`   self.command = [[RACCommand alloc] initWithSignalBlock:^RACSignal * _Nonnull(id  _Nullable input) {return    [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {//            input为传入的参数[subscriber sendNext:@"发送数据"]; ////            NSError *error = [NSError new];//            [subscriber sendError:error];  发送error会自动调用[subscriber sendCompleted];//每次都会创建一个信号,发送完数据,此处记得销毁消息,不然会一直处于执行中。return [RACDisposable disposableWithBlock:^{NSLog(@"信号被销毁");}];}];}];[self.command.executionSignals subscribeNext:^(NSString  * x) {NSLog(@"获取一个信号---%@",x);}];[self.command.executing subscribeNext:^(NSNumber * _Nullable x) {NSLog(@"监听完成---%@",x); //x为监听状态 0代表执行完毕,1代表执行中}];[self.command.errors subscribeNext:^(NSError * _Nullable x) {NSLog(@"错误"); // 接受错误信息}];[self.command.executionSignals.switchToLatest subscribeNext:^(id  _Nullable x) {NSLog(@"接受信号中的信号x为数据:%@",x);//x为发送的数据}];      [self.command execute:@"11111"]; //调用command`

数据绑定

 RAC把基本控件都做了扩展分类,使用时直接可以调用rac_signalFor 绑定对应事件,使用非常方便。
       绑定:宏RAC`RAC(对象, 属性) = 事件;`监听`[RACObserve(对象, 属性) subscribeNext:^(id  _Nullable x) {@strongify(self)改变时做相应操作
}]`
联合使用
  `[[RACObserve(对象, 属性) skip:1] subscribeNext:^(NSString*  _Nullable value) { //监听属性,//skip跳过第一次}][RACSignal combineLatest:@[RACObserve(self, 属性1),RACObserve(selfl, 属性2)] reduce:^id _Nullable(NSString *realName ,NSString *cardNo){//combineLatest  将属性1和2同时监听,,所有信号发出新值时才会触发信号//关键字为merge  是任意值改变就会触发信号}][[siganal filter:^BOOL(id  _Nullable value) {return value;  //执行过滤条件}] subscribeNext:^(id  _Nullable x) {NSLog(@"%@",x); //接受数据}];   [[siganal ignore:@"发送数据"] subscribeNext:^(id  _Nullable x) {NSLog(@"1111%@",x); //接受数据   过滤特定条件}];[[siganal take:4] subscribeNext:^(id  _Nullable x) {NSLog(@"1111%@",x); //只接受4次信号,之后就不再接受信号}];`
 RAC是一个非常强大的框架,对于一些逻辑,事件监听能很大帮助我们解决一些需要写很多逻辑代码才能完成的事情,对于系统本来很简单的操作就没必要到处使用RAC而搞得复杂。上面就是RAC的简单介绍以及基本使用,希望能帮助到大家理解。如有理解不对或者建议欢迎大家留言。

RAC-ReactiveObjC使用解析介绍——iOS相关推荐

  1. Thumbnailator图片处理的常用方法解析介绍

    目录 1. 引入pom依赖 2. 配置常量枚举 3. Thumbnailator常用方法解析介绍 3.1 size(int var1, int var2):指定大小进行缩放 3.2 scale(dou ...

  2. 阿里巴巴的FastJson数据解析介绍

    阿里巴巴的FastJson数据解析介绍 本文简单介绍一下阿里巴巴的FastJson的json数据解析的简单用法. FastJson据说是目前Json数据解析最快捷的工具,虽然传闻会有一些bug,但是基 ...

  3. java ios乱码_相同的后台java代码,txt文件解析,安卓解析正常,IOS却是乱码,PC解析也正常.......

    中文乱码,之所以出现这种现象,根本原因是解析和编码所按照的字符集不 同,而字符集是什么呢? ``` 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同, ...

  4. ORACLE 11GR2 RAC的网络规划解析

    在ORACLE 11gR2中,安装RAC发生了显著变化.在10g以及11gR1的时代,安装RAC的步骤是先安装CRS,再安装DB,而到了11gR2的时代,crs与asm被集成在一起,合称为GRID,必 ...

  5. 支付宝客户端架构解析:iOS 容器化框架初探

    前言 由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在"容器化框架设计"."网络优化"."性能启动优化"." ...

  6. Web中常用字体介绍(ios和android浏览器支持的字体),Mark以后留用

    1.在Web编码中,CSS默认应用的Web字体是有限的,虽然在新版本的CSS3,我们可以通过新增的@font-face属性来引入特殊的浏览器加载字体. 浏览器中展示网页文字内容时,文字字体都会按照设计 ...

  7. 【Facebook的UI开发框架React入门之八】Image的使用简单介绍(iOS平台)-goodmao

    --------------------------------------------------------------------------------------------------- ...

  8. 文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍...

    一.简单介绍 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例 ...

  9. 以cisco 3550为例介绍IOS的恢复方法:

    第一步:用控制线连接交换机console口与计算机串口1,用带有xmodem功能的终端软件连接(微软操作系统自带的超级终端软件即可). 第二步:设置连接方式为串口1(如果连接的是其他串口就选择其他串口 ...

最新文章

  1. 【机器学习】无监督学习
  2. python下载网页里面所有的图片-Python批量下载网页图片详细教程
  3. img 隐藏_CSS3界面样式和溢出文字隐藏overflow
  4. 阿里智能运维算法大赛,邀你挑战大规模硬盘故障预测!
  5. 【原创】backbone1.1.0源码解析之Events
  6. 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现
  7. PX4环境git submodule update --init --recursive失败的解决办法
  8. 百度智能云发布『乘风』 端云一体化方案 助力人脸应用10分钟落地
  9. 昨晚调试一段PHP程序时遇到的三个问题
  10. Unity Plugins的使用方法
  11. Android简明开发教程十六:Button 画刷示例
  12. 我的世界服务器地图软件制作教程,我的世界RPG地图制作教程 利用MC小助手进行制作...
  13. 【热门主题:银魂win7主题】
  14. 华为路由器:AR真机忘记Console口密码的处理方法全过程演示
  15. 新手20天自学吉他入门
  16. ASP微信头像保存到服务器,asp微信小程序获取用户头像和微信名-asp写的服务端...
  17. c语言编程电话簿,C语言实现电话簿项目.pdf
  18. 微机原理知识点总结9(8255A+8251A)
  19. Swagger 接口分组
  20. 读《计算机科学概论》

热门文章

  1. 中国人民银行决定10月25日起上调存款准备金率
  2. Merkle Tree用于100%准备金证明
  3. Java项目:小区物业管理系统(java+Springboot+ssm+mysql+maven)
  4. math与cena之争
  5. C语言递归实现字符串反转(详解)
  6. 关于海外客户的设计交付体验与思考
  7. 正点原子STM32F429核心板的插座型号
  8. matlab中单位矩阵eye()函数
  9. STM32BootLoader引导SecureCRT串口固件升级(YModem协议)
  10. 基于MATLAB的图像卷积运算