参考资料:

  • ReactiveCocoa源码(OC版)

  • Swift 版 or ReactiveSwift

  • MVVMReactiveCocoaDemo介绍

常见用法

1. rac_signalForControlEvents监听事件,替换addTarget监听

    [[self.myButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {@strongify(self);//改变属性 触发KVOself.userModel.userName=@"cnblogs";//发送通知 触发通知监听[[NSNotificationCenter defaultCenter] postNotificationName:MPTNotificationName object:nil];NSLog(@"rac_signalForControlEvents监听事件 - ");}];
复制代码

2. rac_textSignal 监听文本框的文字改变

    [[self.myTextField rac_textSignal] subscribeNext:^(id x) {NSLog(@"rac_textSignal当前输入:%@",x);}];//distinctUntilChanged 相同就不会再响应  takeUntil:(RACSignal *):获取信号直到某个信号执行完成[[[[self.myTextField rac_textSignal] distinctUntilChanged] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {NSLog(@"rac_textSignal-distinctUntilChanged当前输入:%@",x);}];
复制代码

3. rac_valuesAndChangesForKeyPath KVO监听

    [[self.userModel rac_valuesAndChangesForKeyPath:@"userName"
options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {NSLog(@"userName now value:%@",x[0]);}];
复制代码

4. 监听通知

    [[[[NSNotificationCenter defaultCenter] rac_addObserverForName:MPTNotificationName object:nil] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(id x) {NSLog(@"收到通知了");}];
复制代码

5. 替换代理方法的实现 rac_signalForSelector

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"RAC" message:@"RAC TEST" delegate:self cancelButtonTitle:@"cancel" otherButtonTitles:@"other", nil];[[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:) fromProtocol:@protocol(UIAlertViewDelegate)] subscribeNext:^(RACTuple *tuple) {NSLog(@"tuple.first:%@",tuple.first);NSLog(@"tuple.second:%@",tuple.second);NSLog(@"tuple.third:%@",tuple.third);//tuple.first UIAlertView当前对象//tuple.second索引值}];[alertView show];//   [[self rac_signalForSelector:@selector(alertView:clickedButtonAtIndex:)] subscribeNext:^(id x) {
//
//  }];//UIAlertView 还有更简便的 上面只是为了演示rac_signalForSelector  下面的X就是索引值//如果使用此方法rac_signalForSelector 不会再执行了。因为rac_buttonClickedSignal内部已经订阅了rac_signalForSelector方法[[alertView rac_buttonClickedSignal] subscribeNext:^(id x) {NSLog(@"index %@",x);}];
复制代码

6. 处理多个请求,都返回结果的时候,统一做处理.

rac_liftSelectorRACSignal *request1 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {// 发送请求1[subscriber sendNext:@"发送请求1"];return nil;}];RACSignal *request2 = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {// 发送请求2[subscriber sendNext:@"发送请求2"];return nil;}];// 使用注意:几个信号,参数一的方法就几个参数,每个参数对应信号发出的数据。[self rac_liftSelector:@selector(updateUIWithR1:r2:) withSignalsFromArray:@[request1,request2]];复制代码

更新UI

- (void)updateUIWithR1:(id)data r2:(id)data1
{NSLog(@"更新UI%@  %@",data,data1);
}
复制代码

队列

   //then用法//用于连接两个信号,当第一个信号完成,才会连接then返回的信号RACSignal *thenSignal=[aSignal then:^RACSignal *{return bSignal;}];[thenSignal subscribeNext:^(id x) {NSLog(@"thenSignal的值:%@",x);}];//输出  thenSignal的值:7   thenSignal的值:9   bSignal清理了  aSignal清理了//then实例[[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {NSLog(@"第一步");[subscriber sendCompleted];//向订阅者发送完成信号,否者一直处于执行中return nil;}] then:^RACSignal *{return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {NSLog(@"第二步");[subscriber sendCompleted];return nil;}];}] then:^RACSignal *{return [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {NSLog(@"第三步");[subscriber sendCompleted];return nil;}];}] subscribeCompleted:^{NSLog(@"完成");}];//输出:第一步   第二步  第三步//说明:then的用法要跟上面这样使用,它会在RACSignal里面就执行
复制代码
  • doNext doCompleted执行时间 doNext: 执行Next之前,会先执行这个Block doCompleted: 执行sendCompleted之前,会先执行这个Block
[[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {[subscriber sendNext:@"执行sendNext"];NSLog(@"执行sendNext");[subscriber sendCompleted];return nil;}] doNext:^(id x) {NSLog(@"执行doNext");}] doCompleted:^{NSLog(@"执行doCompleted");}] subscribeNext:^(id x) {NSLog(@"执行subscribeNext");
}];//    输出
//    执行doNext
//    执行subscribeNext
//    执行sendNext
//    执行doCompleted复制代码

ReactiveCocoa个人记录相关推荐

  1. ReactiveCocoa代码实践之-更多思考

    三.ReactiveCocoa代码实践之-更多思考 1. RACObserve()宏形参写法的区别 之前写代码考虑过 RACObserve(self.timeLabel , text) 和 RACOb ...

  2. 从 ReactiveCocoa 中能学到什么?不用此库也能学以致用

    从知道ReactiveCocoa开始就发现对这个库有不同的声音,上次参加<T>技术沙龙时唐巧对在项目中已全面使用FRP的代码家提出为什么这种编程模型出现了这么长时间怎么像ReactiveC ...

  3. iOS、Mac开源项目记录 - From TimLiu-iOS

    本篇博文并非本人整理,是从下面大神的Github下载,为了方便自己查看所以发布到这里.感谢大神整理. 来自:https://github.com/huang5556019/huang5556019.g ...

  4. ReactiveCocoa Documents 翻译(基于版本V2.5)

    1. 基本操作(Basic Operators) 描述 ReactiveCocoa 最常用的一些操作以及使用范例. 主要是如何运用 序列(sequences) 和 信号(signals) 的流操作. ...

  5. 知识点归档,博客记录

    由于本人能力有限,难免有错,欢迎批评.指正.补充,目录请看右下角 Foundation复习 利用category + runtime + 异常的捕获 来写一个防止崩溃的框架 扩展(Extension) ...

  6. mysql建立联合索引,mysql建立唯一键,mysql如何解决重复记录联合索引

    在项目中,常常要用到联合唯一   在一些配置表中,一些列的组合成为一条记录.   比如,在游戏中,游戏的分区和用户id会形成一条记录.(比如,一个qq用户可以在艾欧尼亚.德玛西亚创建两个账号) 添加联 ...

  7. 实现 连续15签到记录_MySQL和Redis实现用户签到,你喜欢怎么实现?

    现在的网站和app开发中,签到是一个很常见的功能 如微博签到送积分,签到排行榜 微博签到 如移动app ,签到送流量等活动, 移动app签到 用户签到是提高用户粘性的有效手段,用的好能事半功倍! 下面 ...

  8. 记录一次http请求失败的问题分析

    问题背景 当前我有一个基于Flask编写的Restful服务,由于业务的需求,我需要将该服务打包成docker 镜像进行离线部署,原始服务的端口是在6661端口进行开启,为了区分,在docker中启动 ...

  9. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

最新文章

  1. FreeBSD下查看各软件版本命令
  2. linux添加审计账户_眼镜蛇W眼镜蛇白盒品白源代码审计工具 白帽子版
  3. day06:02oracle体系结构_存储结构
  4. LaTex 各种特殊符号
  5. MySQL之单表查询、多表查询(一)
  6. HTML5语言格式,HTML5 自然语言格式的输入表单
  7. python3学习笔记(4)_function-参数
  8. 【LeetCode】64. Minimum Path Sum
  9. idea全局主题_2020年最新-IDEA最详细配置(配图文收藏版配置)
  10. 【算法笔记】最短路-Dijkstra、Floyd、SPFA模版总结+复习
  11. 17.20. 连续中值 堆
  12. python windows api截图_Winapi快速截图并打开
  13. 关于论文可查阅的网站
  14. python的encode方法_Python encode() 方法
  15. (2020李宏毅)机器学习-Explainable Machine Learning
  16. golang和经济学相关资料学习,还不错,果然B站是个学习的好地方。
  17. Origin坐标轴上的连字符修改为负号
  18. 2008年8月7号,晴,热了。一寸光阴一寸金,寸金难买寸光阴。——《增广贤文》
  19. win7电脑怎么连接打印机的方法分享
  20. 数据库课程设计-宿舍管理系统

热门文章

  1. JavaSE学习53:细说多线程之内存可见性
  2. Java虚拟机学习(7):对象内存分配与回收
  3. 如何设计一门语言(二)——什么是坑(b)
  4. 鸟哥的Linux私房菜(基础篇)- 附录 B: EXT2 / EXT3 文件系统
  5. 手持终端机USB无法同步连接是什么意思?
  6. 2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335
  7. 【云吞铺子之专家来了】CDN缓存解读和配置策略
  8. “互联网+”时代下 银行信息如何保证安全?
  9. 用prop还是attr
  10. 娱乐化手游营销模式探索