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

最新文章

  1. springMvc的日期转换之二
  2. [Android]异步 layout inflation(翻译)
  3. css3之3d导航
  4. RAID卡
  5. C Golden gun的巧克力
  6. HDU-4726 Kia&#39;s Calculation 贪心
  7. win7启动后报丢失nscmk.dll解决解决方式
  8. Linux C 实现Ping功能的程序.
  9. JSON反序列化实体类
  10. Java学习笔记6---字符串比较方法compareTo(String str)
  11. java集合类中的迭代器模式
  12. awk 复习
  13. Linux基础命令---tload显示系统负载
  14. ionic2简单分析
  15. IdentityServer4【QuickStart】之利用OpenID Connect添加用户认证
  16. 10折交叉验证(10-fold Cross Validation)与留一法(Leave-One-Out)、分层采样(Stratification)
  17. &quot;Linux内核分析&quot;第六周实验报告
  18. (零)SQL server安装配置
  19. 【ES】学习8-聚合1
  20. POJ 1733 Parity game(种类并查集)

热门文章

  1. java 设置Cookie值
  2. 线程中event.wait() event_obj.set() 的使用
  3. Spring5.0的第一次尝鲜
  4. MD5算法的c++实现
  5. 阿里巴巴Druid数据库连接池的使用
  6. 32、Differential Gene Expression using RNA-Seq (Workflow)
  7. Storm在zookeeper上的目录结构
  8. Struts2学习第二课 Struts2概述
  9. 读《JavaScript权威指南》笔记(一)
  10. java二分法查找实现代码