RxSwift 将 withLatestFrom 运算符与多个源一起使用
RxSwift Use withLatestFrom operator with multiple sources
我有 3 个 observable,即 source、source1 和 source2。我想要的是每当源发出不同的事件时获取 source1 和 source2 的值。这是我想出的代码,显然它不会编译,因为 withLatestFrom 只期望一个可观察的。
source.distinctUntilChanged()
.withLatestFrom(source1, source2) { ([=10=], .0, .1) }
.subscribe(onNext: { (A, B, C) in
print("OnNext called")
})
.disposed(by: bag)
你可以这样做
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)
O/P 看起来像
捕获:
我正在使用 combineLatest
这意味着只有在所有可观察对象至少发出一次值后,这才会起作用。您始终可以使用 startWith
运算符来确保所有可观察对象至少发出一次值。
你快搞定了。将 source1
和 source2
结合起来怎么样?
source.distinctUntilChanged()
.withLatestFrom(Observable.combineLatest(source1, source2)) { ([=10=], .0, .1) }
.subscribe(onNext: { (A, B, C) in
print("OnNext called")
})
.disposed(by: bag)
我有 3 个 observable,即 source、source1 和 source2。我想要的是每当源发出不同的事件时获取 source1 和 source2 的值。这是我想出的代码,显然它不会编译,因为 withLatestFrom 只期望一个可观察的。
source.distinctUntilChanged()
.withLatestFrom(source1, source2) { ([=10=], .0, .1) }
.subscribe(onNext: { (A, B, C) in
print("OnNext called")
})
.disposed(by: bag)
你可以这样做
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)
O/P 看起来像
捕获:
我正在使用 combineLatest
这意味着只有在所有可观察对象至少发出一次值后,这才会起作用。您始终可以使用 startWith
运算符来确保所有可观察对象至少发出一次值。
你快搞定了。将 source1
和 source2
结合起来怎么样?
source.distinctUntilChanged()
.withLatestFrom(Observable.combineLatest(source1, source2)) { ([=10=], .0, .1) }
.subscribe(onNext: { (A, B, C) in
print("OnNext called")
})
.disposed(by: bag)