【问题标题】:Why withLatestFrom don't return latest value?为什么 withLatestFrom 不返回最新值?
【发布时间】:2019-01-17 00:35:34
【问题描述】:

我使用一些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()

【问题讨论】:

    标签: swift rx-swift rx-cocoa


    【解决方案1】:

    withLatestFrom 假设两个可观察序列具有不同的来源,并且它们不会同时触发(就像您的情况一样,它们具有相同的来源)。

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

    更多信息请阅读:

    withLatestFrom doesn't actually provide latest value

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 2014-09-09
      • 2014-04-21
      • 2019-12-15
      • 2014-02-10
      • 1970-01-01
      • 2016-02-24
      相关资源
      最近更新 更多