Почему withLatestFrom не возвращает последнее значение? - PullRequest
0 голосов
/ 17 января 2019

Я использую некоторые 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 Ответ

0 голосов
/ 17 января 2019

withLatestFrom предполагает, что две наблюдаемые последовательности имеют разные источники, и они не запускаются одновременно (как в вашем случае они имеют один и тот же источник).

Если две наблюдаемые последовательности запускаются одновременно, то их можно решить с помощьюиспользуя одну последовательность.

Для получения дополнительной информации читайте:

withLatestFrom на самом деле не предоставляет последнее значение

...