RxSwift高阶函数merge解读

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RxSwift高阶函数merge解读相关的知识,希望对你有一定的参考价值。

参考技术A 通过使用 merge 操作符你可以将多个 Observables 合并成一个,当某一个 Observable 发出一个元素时,他就将这个元素发出。

如果,某一个 Observable 发出一个 onError 事件,那么被合并的 Observable 也会将它发出,并且立即终止序列。

这只是个最简单的 merge。

首先看下 merge 函数:

返回了一个 Merge 序列对象:

Merge 序列被订阅后,会走 MergeBasicSink ( MergeSink 的子类)的 run 函数。

MergeBasicSink 中只实现了一个 performMap ,还要看它的父类。

MergeSink 的 run 中, source.subscribe(self) :源序列开始订阅, MergeSink 作为观察者。这里的源序列就是外界的 of 序列,那么 of 序列的响应必然会来到 MergeSink 的 on 函数中。

MergeSink 的 on 函数中,在 .next 类型下,调用 nextElementArrived ,这个函数在这里只做了个计数 self._activeCount += 1 ,为了管理序列的生命周期。因为子类对 performMap 的实现就是直接返回了 element 。

现在是 of 序列 的响应,这里的 element 就是 of 序列 中的两个元素( PublishSubject 序列)。

接着又调用了 subscribeInner 把 PublishSubject 序列传过去。这里才是 merge 用来合并的重点。这里用了 MergeSinkIter 类,用 PublishSubject 作为源序列去订阅,把 MergeSinkIter 作为它的观察者。这样,等 PublishSubject 有响应的时候就会通知到 MergeSinkIter 的 on 函数中。

MergeSinkIter 的 on 里面直接让它的 _parent(MergeSink)调用 forwardOn ,去让 MergeSink 的观察者响应外界的订阅。这样的话,of 序列中的任意元素( PublishSubject 序列)发出的信号都可以被 merge 序列的订阅者接收到。

以上是关于RxSwift高阶函数merge解读的主要内容,如果未能解决你的问题,请参考以下文章

原创:antd源码解读- Form

高阶组件&&高阶函数

Python 学习笔记 -- 内嵌函数闭包匿名函数高阶函数map高阶函数filter高阶函数reduce

Kotlin的高阶函数和常用高阶函数

Kotlin小知识之高阶函数

高阶函数