RAC操作方法三.

demo地址:https://github.com/SummerHH/ReactiveCocoa.git

  • doNext

  • deliverOn

  • timeout

  • interval

  • delay

  • retry

  • replay

  • throttle

//ReactiveCocoa操作方法之秩序。

- (void)doNext {

    //doNext: 执行Next之前,会先执行这个Block
//doCompleted: 执行sendCompleted之前,会先执行这个Block
[[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@];
[subscriber sendCompleted];
return nil;
}] doNext:^(id x) {
// 执行[subscriber sendNext:@1];之前会调用这个Block
NSLog(@"doNext");
}] doCompleted:^{
// 执行[subscriber sendCompleted];之前会调用这个Block
NSLog(@"doCompleted");
}] subscribeNext:^(id x) {
NSLog(@"%@",x); }];
}

//ReactiveCocoa操作方法之线程。

- (void)deliverOn {
//deliverOn: 内容传递切换到制定线程中,副作用在原来线程中,把在创建信号时block中的代码称之为副作用。 //subscribeOn: 内容传递和副作用都会切换到制定线程中。
}

//ReactiveCocoa操作方法之时间。

- (void)timeout {
//timeout:超时,可以让一个信号在一定的时间后,自动报错。
RACSignal *signal = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
return nil;
}] timeout: onScheduler:[RACScheduler currentScheduler]]; [signal subscribeNext:^(id x) { NSLog(@"%@",x); } error:^(NSError *error) {
// 1秒后会自动调用
NSLog(@"%@",error);
}];
}

//interval 定时:每隔一段时间发出信号

- (void)interval {

    [[RACSignal interval: onScheduler:[RACScheduler currentScheduler]] subscribeNext:^(id x) {
NSLog(@"%@",x);
} error:^(NSError *error) {
NSLog(@"%@",error);
}];
}

//delay 延迟发送next

- (void)delay {

   [[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

        [subscriber sendNext:@];
return nil;
}] delay:] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
}

// ReactiveCocoa操作方法之重复。

- (void)retry {
//retry重试 :只要失败,就会重新执行创建信号中的block,直到成功.
__block int i = ;
[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { if (i == ) {
[subscriber sendNext:@];
}else{
NSLog(@"接收到错误");
[subscriber sendError:nil];
}
i++;
return nil; }] retry] subscribeNext:^(id x) { NSLog(@"%@",x); } error:^(NSError *error) { }];
}

//replay重放:当一个信号被多次订阅,反复播放内容

- (void)replay {
RACSignal *signal = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) { [subscriber sendNext:@];
[subscriber sendNext:@]; return nil;
}] replay]; [signal subscribeNext:^(id x) { NSLog(@"第一个订阅者%@",x); }]; [signal subscribeNext:^(id x) { NSLog(@"第二个订阅者%@",x); }];
}

throttle

- (void)throttle {
RACSubject *signal = [RACSubject subject];
_signal = signal;
// 节流,在一定时间(1秒)内,不接收任何信号内容,过了这个时间(1秒)获取最后发送的信号内容发出。
[[signal throttle:] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
}

学习资料:

最快让你上手ReactiveCocoa之基础篇: http://www.jianshu.com/p/87ef6720a096

最快让你上手ReactiveCocoa之进阶篇: http://www.jianshu.com/p/e10e5ca413b

RAC 基本操作命令 :https://segmentfault.com/a/1190000000408492

MVVM+RAC 从框架到实战: http://www.jianshu.com/p/3beb21d5def2

iOS ReactiveCocoa 最全常用API整理(可做为手册查询: http://www.jianshu.com/p/a4fefb434652

ReactiveCocoa v2.5 源码解析 之 架构总览 : http://www.cocoachina.com/ios/20160105/14880.html

RAC核心元素与信号流:http://www.jianshu.com/p/d262f2c55fbe

iOS开发ReactiveCocoa学习笔记(六)的更多相关文章

  1. iOS开发ReactiveCocoa学习笔记(一)

    学习 RAC 我们首先要了解 RAC 都有哪些类 RACSignal RACSubject RACSequence RACMulticastConnection RACCommand 在学习的时候写了 ...

  2. iOS开发ReactiveCocoa学习笔记(五)

    ReactiveCocoa常见操作方法介绍: demo地址:https://github.com/SummerHH/ReactiveCocoa.git filter ignore ignoreValu ...

  3. iOS开发ReactiveCocoa学习笔记(四)

    ReactiveCocoa常见操作方法介绍: demo地址:https://github.com/SummerHH/ReactiveCocoa.git 1.1 ReactiveCocoa操作须知 所有 ...

  4. iOS开发ReactiveCocoa学习笔记(二)

    RAC 中常见的宏: 使用宏定义要单独导入 #import <RACEXTScope.h> 一. RAC(TARGET, [KEYPATH, [NIL_VALUE]]):用于给某个对象的某 ...

  5. iOS开发ReactiveCocoa学习笔记(三)

    RAC常用用法: 1.监听按钮的点击事件: UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; button.frame ...

  6. iOS开发如何学习前端(1)

    iOS开发如何学习前端(1) 我为何学前端?因为无聊. 概念 前端大概三大块. HTML CSS JavaScript 基本上每个概念在iOS中都有对应的.HTML请想象成只能拉Autolayout或 ...

  7. iOS开发Swift篇—(六)流程控制

    iOS开发Swift篇—(六)流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注意:这 ...

  8. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  9. 转:【iOS开发每日小笔记(十一)】iOS8更新留下的“坑” NSAttributedString设置下划线 NSUnderlineStyleAttributeName 属性必须为NSNumber

    http://www.bubuko.com/infodetail-382485.html 标签:des   class   style   代码   html   使用   问题   文件   数据 ...

随机推荐

  1. 快速实现CentOS7安装python-pip

    1.首先检查linux有没有安装python-pip包,终端执行 pip -V [root@ network-scripts]# pip -V -bash: pip: command not foun ...

  2. Java探索之旅(4)——方法和Random&Math类

    1.基本知识点    ❶方法在C++里面称为函数.调用方法时,应该类型兼容--即不需显式类型转换即可将形参传递给实参.    ❷形参的改变不影响实参的值.    ❸Java注重模块化设计和自顶向下的设 ...

  3. Learning Python 008 正则表达式-001

    Python 正则表达式 总结 这节课讲讲正真使用的技术 - 正真表达式. 文本爬虫 什么是正则表达式 正则表达式这个名词听起来就有一种很官方的感觉,但是它是一个很很很有用的技术.我用语言是不能形容它 ...

  4. Python及R安装包版本查看方法

    R包查询 查询已安装的所有的包:library() 或installed.packages()(括号内为空,区别以上两项) 查询具体包的信息: help(package="pheatmap& ...

  5. 7.27实习培训日志-Oracle SQL(三)

    Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...

  6. 7.25实习培训日志-Oracle SQL(一)

    Oracle SQL(一) 重点 尽量避免select *,影响性能,不直观. 慎用Distinct,会排序,影响性能,用exists 排序尽量利用索引,索引有序 索引列不要加函数,会使索引失效 外连 ...

  7. pb_ds的优先队列实现dijkstra

    用pb_ds的优先队列来做dijkstra..据说noip能用哟. 先来篇关于仿函数的文章. 由于pb_ds支持由迭代器访问元素,并且push操作会返回一个迭代器,merge操作会更新迭代器,相当于帮 ...

  8. 洛谷P4332 [SHOI2014]三叉神经树(LCT)

    传送门 FlashHu大佬太强啦%%% 首先,我们可以根据每一个点的权值为$1$的儿子的个数把每个点记为$0~3$,表示这一个点的点权 先考虑一下暴力的过程,假设从$0$变为$1$,先更改一个叶子结点 ...

  9. Shell操作相关的快捷键 --Linux

    一.shell和bash shell --unix --Bourne shell ,bash --linux --Bourne again shell.bash (GNU Bourne-Again S ...

  10. eclipse对于虚拟内存的溢出处理

    第一个配置:-Xms1024m -Xmx2048m 第二个配置: 第二个配置:-XX:MaxPermSize=1024m 第三个配置就是eclipse安装包中的eclipse.ini文件 -Xms51 ...