RxSwift对一个observable的多个订阅

时间:2017-07-16 12:30:41

标签: ios swift rx-swift

据我所知,如果我想对一个observable进行多次订阅,我需要使用.share()运算符,但我不明白为什么呢?

我正在寻找一些基于本地数据(而不是网络)的示例来演示使用.share()和没有它的区别。

运营商真正做的是什么 - 使用先前订阅的数据或创建新的数据?

1 个答案:

答案 0 :(得分:12)

我写了一个虚构的小例子:

let shareObservable = Observable<Int>.create { observer in
    print("inside block")
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
        observer.onCompleted()
    }
    return Disposables.create()
}.share()

shareObservable.subscribe()
shareObservable.subscribe()

使用以下输出:

inside block

如果我从.share移除shareObservable,我会看到:

inside block
inside block

这个例子的要点是我第二次订阅相同的observable还没有完成,因此块内的逻辑不会被执行。

如果您现在有一些误解,请告诉我。

You can read more about share, shareReplay, shareReplayLatesWhileConnected, etc