RACSingal的常用方法

一 基本使用

1map

    // 0  创建信号提供者// RACSubject,既能发送信号,又能订阅信号// 多用于代理,相当于OC里的delegate或者回调blockRACSubject *subject = [RACSubject subject];// 1 绑定信号RACSignal *bindSignal = [subject map:^id _Nullable(id  _Nullable value) {return [NSString stringWithFormat:@"这是我自定义的信号"];}];// 2 订阅绑定信号[bindSignal subscribeNext:^(id  _Nullable x) {NSLog(@"%@",x);}];// 3 发送信号[subject sendNext:@"HelloThere"];

2 信号的串联

/**信号的串联把控代码的执行顺序 如下面的例子 顺序下载图片*/
- (void)concat
{RACSignal *sg1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {// 线程是阻塞的NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://qzonestyle.gtimg.cn/qzone/app/weishi/client/testimage/1024/36.jpg"]] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (!error) {[subscriber sendNext:@"Hellosg1"];[subscriber sendCompleted];NSLog(@"sg1");}}];[task resume];return nil;}];RACSignal *sg2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {NSURLSession *session = [NSURLSession sharedSession];NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://qzonestyle.gtimg.cn/qzone/app/weishi/client/testimage/1024/56.jpg"]] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (!error) {[subscriber sendNext:@"Hellosg2"];[subscriber sendCompleted];NSLog(@"sg2");}}];[task resume];return nil;}];RACSignal *conSig = [sg1 concat: sg2];// 订阅信号[conSig subscribeNext:^(id  _Nullable x) {NSLog(@"%@",x);}];}

3 信号combine 或的条件

/**数组中的信号被打包成一个信号被打包的信号都要完成信号的发送信号才可以被订阅都能正常被订阅接收信号*/- (void)combineLatest
{// 因为信号sg1 没有完成发送 所以信号不能被订阅RACSignal *sg1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
//        [subscriber sendNext: @"Fromsg1"];
//        [subscriber sendCompleted];return nil;}];RACSignal *sg2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {[subscriber sendNext: @"Fromsg2"];[subscriber sendCompleted];return nil;}];RACSignal *combineSig = [RACSignal combineLatest:@[sg1,sg2]];// 订阅信号[combineSig subscribeNext:^(id  _Nullable x) {//  打印的是 RACTupleNSLog(@"%@",x);}];}

4 信号的压缩

/**压缩信号订阅之后再次进行解压
*/- (void)zip
{RACSignal *sg1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {[subscriber sendNext: @"Fromsg1"];[subscriber sendCompleted];return nil;}];RACSignal *sg2 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {[subscriber sendNext: @"Fromsg2"];[subscriber sendCompleted];return nil;}];// 信号订阅[[sg1 zipWith:sg2]subscribeNext:^(id  _Nullable x) {// 解压缩RACTupleUnpack(NSString *str1,NSString *str2) = x;NSLog(@"%@---%@",str1,str2);}];}

5 信号的过滤

/**信号的过滤
*/- (void)filter
{RACSignal *sig = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {// 发送多个文本[subscriber sendNext:@"100"];[subscriber sendNext:@"200"];[subscriber sendNext:@"300"];[subscriber sendCompleted];return nil;}];[[sig filter:^BOOL(NSString * value) {// 可以进行过滤if (value.integerValue > 200) {return  value;}return nil;}] subscribeNext:^(id  _Nullable x) {// 只会打印出300NSLog(@"%@",x);}];}

6 信号的延迟

/**信号的延迟订阅*/- (void)delay
{RACSignal *sig1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {[subscriber sendNext:@"5s之后打印"];[subscriber sendCompleted];return nil;}];// 延迟5秒订阅信号[[sig1 delay:5]subscribeNext:^(id  _Nullable x) {NSLog(@"%@",x);}];}

7 flattenMap

/**flattenMap 对传递过来的信号进行二次定义也可以多次定义*/- (void)flattenMap
{RACSignal *sg1 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {[subscriber sendNext:@"1"];return nil;}];// 对传递过来的信号进行二次定义RACSignal *flSig = [sg1 flattenMap:^__kindof RACSignal * _Nullable(id  _Nullable value) {return [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {[subscriber sendNext:[NSString stringWithFormat:@"flattenMap-%@",value]];return nil;}];}];[flSig subscribeNext:^(id  _Nullable x) {NSLog(@"%@",x);}];}

3-RACSignal 常用方法相关推荐

  1. 30 个 php 操作 redis 常用方法代码例子

    这篇文章主要介绍了 30 个 php 操作 redis 常用方法代码例子 , 本文其实不止 30 个方法 , 可以操作 string 类 型. list 类型和 set 类型的数据 , 需要的朋友可以 ...

  2. SearchRequestBuilder常用方法说明

    SearchRequestBuilder常用方法说明 (1) setIndices(String... indices):上文中描述过,参数可为一个或多个字符串,表示要进行检索的index:(2) s ...

  3. AJAX 一些常用方法

    AJAX 一些常用方法 abort() 停止当前请求 getAllResponseHeaders() 返回包含HTTP请求的所有响应头信息,其中响应头包括Content-Length,Date,URI ...

  4. OC基础第四讲--字符串、数组、字典、集合的常用方法

    OC基础第四讲--字符串.数组.字典.集合的常用方法 字符串.数组.字典.集合有可变和不可变之分.以字符串为例,不可变字符串本身值不能改变,必须要用相应类型来接收返回值:而可变字符串调用相应地方法后, ...

  5. vue——props的两种常用方法

    vue--props的两种常用方法 1.实现父-->子的通信 举例如下: 父组件 parent.vue <children :channel="object1"> ...

  6. C#中静态方法的运用和字符串的常用方法(seventh day)

    又来到了今天的总结时间,由于昨天在云和学院学的知识没有弄懂,今天老师又专门给我们非常详细地讲了一遍,在这里非常谢谢老师.O(∩_∩)O 话不多说,下面就开始为大家总结一下静态方法的运用和字符串的常用方 ...

  7. 考考基础部分,谈谈Java集合中HashSet的原理及常用方法

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:工匠初心 cnblogs.com/LiaHon/p/1125 ...

  8. OC中的NSNumber、NSArray、NSString的常用方法

    和C语言不同,在Objective-C语言中,有单独的字符串类NSString.C语言中,string是由 char(ASCLL码)字符组成 OC中,字符串是由unichar(Unicode)字符组成 ...

  9. 网站性能优化的常用方法

    网站性能的优化是一件大事.它涉及多个方面需要照顾,其中许多取决于网站本身.其复杂性和元素.但是,还有一些适用于任何站点的常用优化方法. 集成 CDN 内容交付网络(又名 CDN)是一个非常棒的工具,可 ...

最新文章

  1. 2022-2028年中国草炭土行业市场研究及前瞻分析报告
  2. 使用Java mail发送邮件附件出现附件上产生.eml文件夹的问题及附件名.bin结尾问题...
  3. linux sa 命令,Linux 常用命令全拼
  4. 吴恩达《机器学习》课程总结(16)推荐系统
  5. 一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南
  6. android 创建线程的三种方式
  7. 直方图均衡化的原理及实现
  8. 如何使用Xposed+JustTrustMe来突破SSL Pinning
  9. 换了一把椅子之后才知道,原来人体工学可以这么香。
  10. Canal Admin Web-UI 学习
  11. 【英语:基础进阶_听口实战运用】D1.听口实战运用
  12. 【题解】【AcWing】1635. 最大团
  13. typescript常用的一些内置类型
  14. A15处理器和m1哪个好
  15. 精尽Spring MVC源码分析 - 一个请求的旅行过程
  16. 如何通过AWS Route53注册域名
  17. python05元组字典
  18. ECLIPSE android 布局页面文件出错故障排除Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V
  19. 时间管理:瞎忙和高效的区别
  20. 关于SQL反勾号或者叫飘号(``)

热门文章

  1. MYSQL explain详解[转载]
  2. eclipse 变成中文
  3. 最新Java中Date类型详解
  4. inline-block空隙怎么解决
  5. binutils工具集用法
  6. C#编写的生成缩略图程序
  7. libevent介绍
  8. GridView隐藏列取值解决方案
  9. DataGrid连接Access的快速分页法(1)——需求与现状
  10. 对比.Net PetShop和Duwamish来探讨Ado.Net的数据库编程模式