上一篇简单介绍了一下RAC,这次探究RAC中的map映射用法。
Map(映射) RAC中包含两种映射方法map、flattenMap,映射方法是将原信号中的内容映射成新的指定内容。 通过对比,从map的实现方法中可以看出是基于flattenMap方法的一层封装,但同时又有不同之处。
返回block(value)
从上图的实现方法中可以看出,flattenMap方法和map方法都有一个带参数value的block作为这个方法的参数。不同的是,flattenMap方法通过调用block(value)来创建一个新的方法。它可以灵活的定义新创建的信号。而map方法,将会创建一个和原来一模一样的信号,只不过新的信号传递的值变成了block(value) flattenMap作用:把原信号的内容映射成一个新信号,并return返回给一个RACStream类型数据。实际上是根据前一个信号传递进来的参数重新建立了一个信号,这个参数,可能会在创建信号的时候用到,也有可能用不到。
flattenMap实现
flattenMap返回值打印
进入flattenMap方法查看,可以发现是调用bind方法实现。而flattenMap中的block返回值,将作为bind中bindBlock返回值处理。 当订阅绑定信号时,生成bindBlock; 源信号发送内容时,会去调用bindBlock,而bindBlock内部就会调用flattenMap的block,把数据封装成RACSignal类型信号; flattenMap return返回的信号成为bindBlock中返回信号,当订阅bindBlock返回信号时,就会得到绑定信号的订阅者,将处理完成的信号内容send出来。
flattenMap内部实现
map作用:是将原信号的值自定义为新的值,不需要再返回RACStream类型,value为源信号的内容,将value处理好的内容直接返回即可。map方法将会创建一个一模一样的信号,只修改其value。
map实现
map返回值打印
总结一下,同样作为映射命令,在实际开发过程中,如果使用map命令,则block代码块中return的是对象类型;而flattenMap命令block代码块中return的是一个新的信号。
对于map与flattenMap区别的理解,参考于: https://blog.csdn.net/abc649395594/article/details/46552865