RxSwift - withLatestFrom 结合来自两个可观察值的值
RxSwift - withLatestFrom combining values from both observables
我想达到这样的效果:
L -1-2-3------4------5-6-7-8----
R ---------A------B----------C--
O ---------A3-----B4---------C8
所以基本上类似于 withLatestFrom 但结合了两个可观察值的值(如结合最新)。
我想没有现成的操作员。知道如何实现吗?
只需使用您 withLatestFrom
的结果选择器。没有闭包的重载实现简单地忽略了第一个可观察对象。例如:
Observable.just("one")
.withLatestFrom(Observable.just(1))
{ oneAsString, oneAsInt in return (oneAsString, oneAsInt) }
您可以通过使用 combineLatest
和 distinctUntilChanged
后跟 map
.
来实现此目的
Observable.combineLatest(L,R) { lhs, rhs in
return (lhs, rhs)
}
.distinctUntilChanged { last, new in
return last.1 != new.1
}
.map { combined in
//Do your thing to create the combination
}
短版,其中 R = input.r 和 L = input.l
let output = input.r
.withLatestFrom(input.l) { ([=10=], ) }
我想达到这样的效果:
L -1-2-3------4------5-6-7-8----
R ---------A------B----------C--
O ---------A3-----B4---------C8
所以基本上类似于 withLatestFrom 但结合了两个可观察值的值(如结合最新)。
我想没有现成的操作员。知道如何实现吗?
只需使用您 withLatestFrom
的结果选择器。没有闭包的重载实现简单地忽略了第一个可观察对象。例如:
Observable.just("one")
.withLatestFrom(Observable.just(1))
{ oneAsString, oneAsInt in return (oneAsString, oneAsInt) }
您可以通过使用 combineLatest
和 distinctUntilChanged
后跟 map
.
Observable.combineLatest(L,R) { lhs, rhs in
return (lhs, rhs)
}
.distinctUntilChanged { last, new in
return last.1 != new.1
}
.map { combined in
//Do your thing to create the combination
}
短版,其中 R = input.r 和 L = input.l
let output = input.r
.withLatestFrom(input.l) { ([=10=], ) }