ViewController
私はinit()
にPublishSubject
を使用してホットストリームを作成しています。 ViewModel
はビューから生成されたストリームであるため、ViewModel
を作成する前にビューのバインドが完了するまで待つ必要があるため、ViewModel
にを使用してストリームを渡します。 ViewModel
を作成した後、ViewController
のイベントをストリームにプッシュし、ViewModelが非同期リクエスト(これもRxでラップされています)を起動してイベントに反応することを期待します。flatMap()はシングルイベントで2回呼び出されます
の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)
}
....
}
のViewModel:
class ExampleViewModel {
init(stream: Observable<Bool>) {
stream.flatMap { _ in
doSomethingAsyncThatReturnsAnObservable()
}
}
private func doSomethingAsyncThatReturnsAnObservable() -> Observable<CustomObject> { ... }
}
私の問題は、一つだけのイベントがストリーム内にあるときdoSomethingAsyncThatReturnsAnObservable()
が2回呼び出されていることです。私はvar count = 1; stream.subscribeNext { _ in print(count++) }
を使ってその事実を確認しました。これは1
を印刷します。
なぜ、subscribeNext()
が各イベントで1回発生しますが、flatMap()
は2回発生しますか?
感謝を使用することが一度呼ばれるようにしたい場合は
は、イベントを放出していますExampleViewModelが購読していました。 –