我有 3 个可观察量,即 source、source1 和 source2。我想要的是每当 source 发出不同的事件时获取 source1 和 source2 的值。这是我想出的代码,显然它不会编译,因为 withLatestFrom 只需要一个可观察值。
source.distinctUntilChanged()
.withLatestFrom(source1, source2) { ($0, $1.0, $1.1) }
.subscribe(onNext: { (A, B, C) in
print("OnNext called")
})
.disposed(by: bag)
你几乎已经拥有它了。将
source1
和 source2
组合起来怎么样?
source.distinctUntilChanged()
.withLatestFrom(Observable.combineLatest(source1, source2)) { ($0, $1.0, $1.1) }
.subscribe(onNext: { (A, B, C) in
print("OnNext called")
})
.disposed(by: bag)
你可以使用这样的东西:
valuesSource
.withUnretained(self) { ($0, $1.0, $1.1, $1.2, $1.3) }
.withLatestFrom(transactionSource) { ($0, $1) }
.withLatestFrom(userSource) { ($0.0, $0.1, $1) }
.map { values, transaction, user -> [SectionType] in
希望这有帮助:)
你可以做这样的事情
let source = PublishSubject<Int>()
let source1 = PublishSubject<Int>()
let source2 = PublishSubject<Int>()
Observable
.combineLatest([source,source1,source2])
.distinctUntilChanged { (oldArray, newArray) -> Bool in
return oldArray.first == newArray.first
}
.subscribe(onNext: { (values) in
debugPrint("source1 value is \(values[1]) and source2 value is \(values[2])")
})
.disposed(by: self.disposeBag)
source1.onNext(100)
source2.onNext(200)
source.onNext(3)
source.onNext(4)
source.onNext(4)
抓住:
我正在使用
combineLatest
这意味着只有在所有可观察量至少发出一次值之后才会起作用。您始终可以使用 startWith
运算符来确保所有可观察量至少发出一次值。
我是这样用的:
source.distinctUntilChanged() .withLatestFrom(Observable.combineLatest(source1, source2)) { ($0, $1.0, $1.1) } .subscribe(onNext: { (A, B, C) 中 print("OnNext 被调用") }) .处置(通过:袋子)