swift - flatMap() llamado dos veces en evento único
mvvm swift2 (1)
Tengo un ViewController en el que en el init() creo una corriente caliente usando PublishSubject . Luego paso la transmisión a mi ViewModel utilizando stream.asObservable() en viewDidLoad() , ya que ViewModel tiene otras dependencias que son secuencias generadas a partir de las vistas, por lo que debe esperar hasta que se ViewModel el enlace de las vistas antes de crear el ViewModel . Después de crear ViewModel , introduzco un evento en mi ViewController en la transmisión y luego espero que ViewModel reaccione ante el evento activando una solicitud asincrónica (que también se completó con 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)
}
....
}
ViewModel:
class ExampleViewModel {
init(stream: Observable<Bool>) {
stream.flatMap { _ in
doSomethingAsyncThatReturnsAnObservable()
}
}
private func doSomethingAsyncThatReturnsAnObservable() -> Observable<CustomObject> { ... }
}
Mi problema es que doSomethingAsyncThatReturnsAnObservable() se llama dos veces cuando solo hay un evento dentro de la secuencia. He verificado ese hecho usando var count = 1; stream.subscribeNext { _ in print(count++) } var count = 1; stream.subscribeNext { _ in print(count++) } que imprime 1 .
¿Alguna idea de por qué subscribeNext() dispara una vez en cada evento pero flatMap() dispara dos veces?
Esto se debe a que flatMap llamó en cada suscripción.
Si quieres que se llame una vez, usa shareReplay(1)