Ho un ViewController
in cui sul init()
creo un flusso di hotstream utilizzando PublishSubject
. Passo quindi allo stream con il numero nel numero viewDidLoad()
, in quanto lo ViewModel
ha altre dipendenze generate da flussi provenienti dalle visualizzazioni, quindi deve attendere il completamento del binding delle viste prima di creare lo ViewModel
. Dopo aver creato lo ViewModel
, inserisco un evento nel mio stream ViewController
e poi mi aspetto che il ViewModel reagisca all'evento disattivando una richiesta asincrona (che è stata anche avvolta con Rx).flatMap() chiamato due volte su evento singolo
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> { ... }
}
mio problema è che doSomethingAsyncThatReturnsAnObservable()
si chiama due volte quando un solo evento è all'interno del flusso. Ho verificato questo fatto utilizzando var count = 1; stream.subscribeNext { _ in print(count++) }
che stampa 1
.
Qualche idea sul motivo per cui lo subscribeNext()
si attiva una volta per ciascun evento ma l'incendio flatMap()
viene generato due volte?
grazie :) non mi rendevo conto che il mio ViewModel viveva ancora sul cambio di scena in quanto sono semplicemente accumulando tra loro e la scena corrente emetteva un evento che l'EsempioViewModel si era iscritto a. –