gpt4 book ai didi

ios - 为什么带有多个 observable 的 RxSwift concat 似乎不起作用?

转载 作者:行者123 更新时间:2023-12-01 16:06:09 25 4
gpt4 key购买 nike

我的 RxSwift代码是,

func testOperators(){

let bag = DisposeBag()

let observable1 = PublishSubject<String>()
let observable2 = PublishSubject<String>()

Observable.concat([observable1, observable2])
.subscribe(onNext: { (value) in
print(value)
}).disposed(by: bag)

observable1.on(.next("1"))
observable1.on(.next("2"))

observable2.on(.next("3"))
observable2.on(.next("4"))

observable1.on(.completed)
observable2.on(.completed)
}

当前输出为,
1
2

我的预期输出是,
1
2
3
4

我错过了什么以及我可以添加/编辑什么以获得预期的输出?

最佳答案

在 concat 订阅 observable2 之前,您正在发出“3”和“4”。 concat 还没有订阅 observable2,因为它正在等待 observable1 完成。当 concat 订阅 observable2 时,“3”和“4”事件已经消失。

打个比方:想象你有两个人在投球,你有一个 catch 手。你已经告诉 catch 手接住第一个投手的所有球,然后切换到第二个投手。第一个 throw 者向 catch 手 throw 两个球,第二个 throw 者向任何人 throw 两个球,因为 catch 手正在等着看第一个 throw 者是否会再投更多的球。然后第一个投球手告诉 catch 手他已经完成了投球。然后 catch 手开始观察第二个投手,后者说他也完成了。最终, catch 手只接住了两个球。

如果你要把 observable2 变成 ReplaySubject它有足够大的缓冲区,然后它会为每个订阅者重放它收到的所有事件,你会得到你想要的输出。

关于ios - 为什么带有多个 observable 的 RxSwift concat 似乎不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60095458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com