Ich habe eine ViewController
in der auf der init()
ich einen heißen Strom mit PublishSubject
erstellen. Ich gehe dann in dem Strom meines ViewModel
stream.asObservable()
im viewDidLoad()
verwenden, da die ViewModel
anderen Abhängigkeiten hat, die Ströme von den Ansichten erzeugt werden, so hat es, bis die Bindung der Ansichten warten ist abgeschlossen, bevor die ViewModel
zu schaffen. Nachdem ich die ViewModel
erstellt habe, schiebe ich ein Ereignis in meinem ViewController
in den Stream und erwarte dann, dass das ViewModel auf das Ereignis reagiert, indem eine asynchrone Anfrage ausgelöst wird (die auch mit Rx umschlossen wurde).flatMap() rief zweimal auf einzelnes Ereignis
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)
}
....
}
Ansichtsmodell:
class ExampleViewModel {
init(stream: Observable<Bool>) {
stream.flatMap { _ in
doSomethingAsyncThatReturnsAnObservable()
}
}
private func doSomethingAsyncThatReturnsAnObservable() -> Observable<CustomObject> { ... }
}
Mein Problem ist, dass doSomethingAsyncThatReturnsAnObservable()
zweimal aufgerufen wird, wenn nur ein Ereignis innerhalb des Stroms ist. Ich habe diese Tatsache mit var count = 1; stream.subscribeNext { _ in print(count++) }
überprüft, die 1
druckt.
Eine Idee, warum subscribeNext()
einmal bei jedem Ereignis ausgelöst wird, aber flatMap()
zweimal ausgelöst wird?
dank Verwendung genannt werden :) ich nicht erkennen, dass mein Ansichtsmodell noch auf Szenenwechsel wurde leben, wie sie nur sie stapeln und die aktuelle Szene ein Ereignis ausstrahlte, dass das ExampleViewModel hatte abonniert. –