RxSwift 对一个 observable 的多个订阅

Posted

技术标签:

【中文标题】RxSwift 对一个 observable 的多个订阅【英文标题】:RxSwift multiple subscriptions to one observable 【发布时间】:2017-07-16 12:30:40 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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

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。

【讨论】:

以上是关于RxSwift 对一个 observable 的多个订阅的主要内容,如果未能解决你的问题,请参考以下文章

在 RxSwift 中处理嵌套的 observables

在 RxSwift 中,我如何对 observable 未发送任何事件进行单元测试?

rxswift:如何获取 Observable<Any> 导致 Observable<[Category]> 的组合?

RxSwift:延迟 observable 直到另一个 observable 完成?

RxSwift - 一个 Observable 中的多个 Observable 值

如何在 Observable.create (RxSwift) 中返回/转发一个 observable