据我所知,如果我想对一个observable进行多次订阅,我需要使用.share()运算符,但我不明白为什么呢?
我正在寻找一些基于本地数据(而不是网络)的示例来演示使用.share()和没有它的区别。
运营商真正做的是什么 - 使用先前订阅的数据或创建新的数据?
答案 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。