flattenMap使用步骤:
     1.传入一个block,block类型是返回值RACStream,参数value
     2.参数value就是源信号的内容,拿到源信号的内容做处理
     3.包装成RACReturnSignal信号,返回出去。
 
flattenMap底层实现:
     0.flattenMap内部调用bind方法实现的,flattenMap中block的返回值,会作为bind中bindBlock的返回值。
     1.当订阅绑定信号,就会生成bindBlock。
     2.当源信号发送内容,就会调用bindBlock(value, *stop)
     3.调用bindBlock,内部就会调用flattenMap的block,flattenMap的block作用:就是把处理好的数据包装成信号。
     4.返回的信号最终会作为bindBlock中的返回信号,当做bindBlock的返回信号。
     5.订阅bindBlock的返回信号,就会拿到绑定信号的订阅者,把处理完成的信号内容发送出来

- (void)flattenMap
{
//1.创建信号
RACSubject *subject = [RACSubject subject];
//2.绑定信号
RACSignal *bindSignal = [subject flattenMap:^RACStream *(id value) {
//value:源信号发送的内容
value = [NSString stringWithFormat:@"HMJ%@", value];
//返回的信号:用来包装成修改内容值
return [RACReturnSignal return:value];
}];
//flattenMap中返回的是什么信号,订阅的就是什么信号
//订阅信号
[bindSignal subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
//发送数据
[subject sendNext:@1];
}

 

FlatternMap和Map的区别
    * 1.FlatternMap中的Block返回信号。
    * 2.Map中的Block返回对象。
    * 3.开发中,如果信号发出的值不是信号,映射一般使用Map
    * 4.开发中,如果信号发出的值是信号,映射一般使用FlatternMap。
 
 
signalOfSignals用FlatternMap
// 创建信号中的信号
RACSubject *signalOfsignals = [RACSubject subject];
RACSubject *signal = [RACSubject subject]; [[signalOfsignals flattenMap:^RACStream *(id value) { // 当signalOfsignals的signals发出信号才会调用 return value; }] subscribeNext:^(id x) { // 只有signalOfsignals的signal发出信号才会调用,因为内部订阅了bindBlock中返回的信号,也就是flattenMap返回的信号。
// 也就是flattenMap返回的信号发出内容,才会调用。 NSLog(@"%@aaa",x);
}]; // 信号的信号发送信号
[signalOfsignals sendNext:signal]; // 信号发送内容
[signal sendNext:@1];
https://www.cnblogs.com/HMJ-29/p/4944012.html

FlatternMap和Map的区别的更多相关文章

  1. Java-list,set,map的区别

    jdk中api的定义 Collection ├----List │ ├----LinkedList │ ├----ArrayList │ └----Vector │ └----Stack └----S ...

  2. list和map的区别

    list和map的区别 list-->list是对象集合,允许对象重复 map-->map是键值对的集合,不允许key重复

  3. c++ list, vector, map, set 区别与用法比较

    http://blog.csdn.net/alex_xhl/article/details/37692297 List封装了链表,Vector封装了数组, list和vector得最主要的区别在于ve ...

  4. hash_map和map的区别

    hash_map和map的区别 分类: STL2008-10-15 21:24 5444人阅读 评论(0) 收藏 举报 class数据结构编译器存储平台tree 这里列几个常见问题,应该对你理解和使用 ...

  5. Map的clear与new Map的区别

    对于clear与new Map的区别.我们首先来看一个例子,本例子是我在实际开发中遇到的,需求就是讲map放入到list中,说白了就是list转map,有两种实现方式,分别是: // 方案一 Map& ...

  6. Java集合:List、Set和Map的区别,ArrayList和LinkedList有何区别..........

    一.数组和集合的区别: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型): 集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! J ...

  7. 【转】STL中vector、list、deque和map的区别

    1.vector 向量 相当于一个数组 在内存中分配一块连续的内容空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacity()函数 ...

  8. Java集合list,map,set区别及遍历

    1.1 List.Set.Map基本区别 1.List,Set都是继承Collection接口,Map不是. 2.List:LinkedList.ArrayList.Vector Set :HashS ...

  9. Java基础知识Set、List、Map的区别

    就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是相对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操 ...

随机推荐

  1. centos6.0 配置SVN

    基本步骤: 1.安装必需的subversion 2.创建版本库 3.配置用户和权限 4.钩子和svn常用命令说明 一.安装subversion 在这里我们使用yum来安装subversion,使用以下 ...

  2. Android TextView加下划线的几种方式

    如果是在资源文件里: <resources> <</u></string> <string name="app_name">M ...

  3. 【参考】JDBC执行存储过程的四种情况

    [1].只有输入IN参数,没有输出OUT参数 [2].既有输入IN参数,也有输出OUT参数,输出是简单值(非列表) [3].既有输入IN参数,也有输出OUT参数,输出是列表 [4].输入输出参数是同一 ...

  4. linux系统利用GPU跑数据(tensorflow)

    https://blog.csdn.net/qq_26591517/article/details/82469680 查看机器上GPU情况 命令: nvidia-smi 功能:显示机器上gpu的情况 ...

  5. 洛谷P3567 [POI2014]KUR-Couriers 主席树

    挺裸的,没啥可讲的. 不带修改的主席树裸题 Code: #include<cstdio> #include<algorithm> using namespace std; co ...

  6. 路飞学城Python-Day7(practise)

    # 1.编码问题# i.请说明python2与python3中的默认编码是什么?# python2中的默认编码是ASCII码,只能识别英文等其他字符# python3中的默认编码是utf-8# ii. ...

  7. macOS seria 10.12升级到macOS Mojave的报错:xcrun: error: invalid active developer path, missing xcrun

    今天升级mac系统到macOS mojave后,在终端操作gitlab时遇到一行莫名其妙的错误: xcrun: error: invalid active developer path (/Libra ...

  8. 2015 Multi-University Training Contest 4 hdu 5336 XYZ and Drops

    XYZ and Drops Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  9. 【转】Hook钩子C#实例

    [转]Hook钩子C#实例 转过来的文章,出处已经不知道了,但只这篇步骤比较清晰,就贴出来了. 一.写在最前 本文的内容只想以最通俗的语言说明钩子的使用方法,具体到钩子的详细介绍可以参照下面的网址: ...

  10. [Angular] Configure an Angular App at Compile Time with the Angular CLI

    Compile time configuration options allow you to provide different kind of settings based on the envi ...