Почему 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 на самом деле не предоставляет последнее значение

Другие вопросы по тегам