Почему withLatestFrom не возвращает последнее значение?
Я использую некоторые BehaviourRelay
для некоторой переменной. И я пользуюсь withLatestFrom
для одного из них. Но withLatestFrom
не вернул последнее значение, которое я связал с ним.
Если я использую combineLatest
, Это работает, но я хочу знать, почему код с withLatestFrom
не работа
let dueDate = BehaviorRelay<Date?>(value: nil)
let numberScheduleDays = BehaviorRelay<Int>(value: 1)
let selectedPaymentDate = BehaviorRelay<Date?>(value: nil)
dueDate.asObservable()
.distinctUntilChanged()
.flatMap { Observable.from(optional: $0) }
.map { self.addDaysForDate(days: 1, date: $0) }
.bind(to: selectedPaymentDate)
.disposed(by: disposeBag)
selectedPaymentDate.asObservable()
.distinctUntilChanged()
.withLatestFrom(dueDate.asObservable()) { (selectedDate: $0, dueDate: $1) }
.map { self.daysBetweenDates(startDate: $0.dueDate, endDate: $0.selectedDate) }
.bind(to: numberScheduleDays)
.disposed(by: disposeBag)
dueDate.accept(Date())
После первого блока selectedPaymentDate.value = Date() + 1
Но в блоке два dueDate
все еще излучают nil
значение. Интересно, почему его значение не Date()
1 ответ
withLatestFrom
Предполагается, что две наблюдаемые последовательности имеют разные источники, и они не запускаются одновременно (как в вашем случае они имеют один и тот же источник).
Если две наблюдаемые последовательности срабатывают одновременно, то их можно решить с помощью одной последовательности.
Для получения дополнительной информации читайте:
withLatestFrom на самом деле не предоставляет последнее значение