为什么withLatestFrom不返回最新值?

时间:2019-01-17 00:35:35

标签: swift rx-swift rx-cocoa

我对某些变量使用了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 :(得分:0)

OptionUser::lists('user_skill');假定两个可观察的序列具有不同的来源,并且它们不会同时触发(就像您的情况,它们具有相同的来源)。

如果两个可观察序列同时触发,则可以使用单个序列来解决。

有关更多信息,请阅读:

withLatestFrom doesn't actually provide latest value