上一篇简单介绍了一下RAC,这次探究RAC中的map映射用法。
Map(映射)
RAC中包含两种映射方法map、flattenMap,映射方法是将原信号中的内容映射成新的指定内容。
通过对比,从map的实现方法中可以看出是基于flattenMap方法的一层封装,但同时又有不同之处。

从上图的实现方法中可以看出,flattenMap方法和map方法都有一个带参数value的block作为这个方法的参数。不同的是,flattenMap方法通过调用block(value)来创建一个新的方法。它可以灵活的定义新创建的信号。而map方法,将会创建一个和原来一模一样的信号,只不过新的信号传递的值变成了block(value)
flattenMap作用:把原信号的内容映射成一个新信号,并return返回给一个RACStream类型数据。实际上是根据前一个信号传递进来的参数重新建立了一个信号,这个参数,可能会在创建信号的时候用到,也有可能用不到。


进入flattenMap方法查看,可以发现是调用bind方法实现。而flattenMap中的block返回值,将作为bind中bindBlock返回值处理。
当订阅绑定信号时,生成bindBlock;
源信号发送内容时,会去调用bindBlock,而bindBlock内部就会调用flattenMap的block,把数据封装成RACSignal类型信号;
flattenMap return返回的信号成为bindBlock中返回信号,当订阅bindBlock返回信号时,就会得到绑定信号的订阅者,将处理完成的信号内容send出来。

map作用:是将原信号的值自定义为新的值,不需要再返回RACStream类型,value为源信号的内容,将value处理好的内容直接返回即可。map方法将会创建一个一模一样的信号,只修改其value。


总结一下,同样作为映射命令,在实际开发过程中,如果使用map命令,则block代码块中return的是对象类型;而flattenMap命令block代码块中return的是一个新的信号。
对于map与flattenMap区别的理解,参考于:
https://blog.csdn.net/abc649395594/article/details/46552865
网友评论