我有一个ViewController
,其中init()
我使用PublishSubject
创建热流。然后我使用ViewModel
中的stream.asObservable()
将流传递到我的viewDidLoad()
,因为ViewModel
具有其他依赖项,这些依赖项是从视图生成的流,所以它必须等待直到在创建ViewModel
之前完成视图的绑定。在创建ViewModel
之后,我将ViewController
中的事件推送到流中,然后期望ViewModel通过触发异步请求(也已用Rx包装)来对事件做出反应。
的ViewController:
class ExampleViewController: ViewController {
....
private let exampleStream: PublishSubject<Bool>
init() {
self.exampleStream = PublishSubject<Bool>()
}
viewDidLoad() {
self.viewModel = viewModelFactory.create(exampleStream.asObservable())
self.exampleStream.onNext(true)
}
....
}
视图模型:
class ExampleViewModel {
init(stream: Observable<Bool>) {
stream.flatMap { _ in
doSomethingAsyncThatReturnsAnObservable()
}
}
private func doSomethingAsyncThatReturnsAnObservable() -> Observable<CustomObject> { ... }
}
我的问题是,当流中只有一个事件时,doSomethingAsyncThatReturnsAnObservable()
被调用两次。我使用打印var count = 1; stream.subscribeNext { _ in print(count++) }
的{{1}}检查了这一事实。
为什么1
会在每个事件中触发一次,但subscribeNext()
两次触发?
答案 0 :(得分:3)
这是因为flatMap
调用了每个订阅。
如果您希望在使用shareReplay(1)