【发布时间】:2017-07-16 12:30:40
【问题描述】:
我知道如果我想对一个 observable 进行多个订阅,我需要使用 .share() 运算符,但我不明白为什么?
我正在寻找一些基于本地数据(不是网络)的示例,以演示使用 .share() 和不使用它的区别。
运营商真正在做什么 - 使用以前订阅的数据还是创建新的?
【问题讨论】:
我知道如果我想对一个 observable 进行多个订阅,我需要使用 .share() 运算符,但我不明白为什么?
我正在寻找一些基于本地数据(不是网络)的示例,以演示使用 .share() 和不使用它的区别。
运营商真正在做什么 - 使用以前订阅的数据还是创建新的?
【问题讨论】:
我写了一个虚构的小例子:
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
如果我从shareObservable 中删除.share,我会看到:
inside block
inside block
这个例子的重点是我第二次订阅了同一个observable,但还没有完成,所以块内的逻辑不会被执行。
如果你现在有什么误解,请告诉我。
You can read more about share, shareReplay, shareReplayLatesWhileConnected, etc。
【讨论】: