Comment puis-je m'assurer qu'un abonné à un Observable
recevra l'événement onNext
après un autre abonné?Commande d'exécution d'abonnement partagé RxSwift
Mon exemple est le suivant:
let firstNameObservable = firstName.asObservable().shareReplay(1)
let lastNameObservable = lastName.asObservable().shareReplay(1)
let bioObservable = bio.asObservable().shareReplay(1)
let websiteObservable = website.asObservable().shareReplay(1)
firstNameObservable.subscribe(onNext: { [unowned self] firstName in self.accountDetails.firstName = firstName }).disposed(by: disposeBag)
lastNameObservable.subscribe(onNext: { [unowned self] lastName in self.accountDetails.lastName = lastName }).disposed(by: disposeBag)
bioObservable.subscribe(onNext: { [unowned self] bio in self.accountDetails.bio = bio }).disposed(by: disposeBag)
websiteObservable.subscribe(onNext: { [unowned self] website in self.accountDetails.website = website }).disposed(by: disposeBag)
Observable.combineLatest(firstNameObservable, lastNameObservable, bioObservable, websiteObservable)
{ [unowned self] _, _, _, _ in return self.accountDetails.validForSignUp }
.bind(to: isValid)
.disposed(by: disposeBag)
Je voudrais que cette dernière combineLatest
soit déclenché après l'une des 4 subscriptions
au-dessus ont déjà exécuté. C'est parce que c'est seulement après que les propriétés sur accountDetails
ont été définies que le validForSignUp
sera précis.
Je suis conscient qu'une solution à ce problème serait de faire validForSignUp
un Variable
et de l'observer, mais supposons que ce n'est pas possible.
Est-ce que 'isValid' est' Variable'? Vous devriez éviter les variables et les sujets si possible. –