我想要达到这样的结果:
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) }
R = input.r 且 L = input.l 的简短版本
let output = input.r
.withLatestFrom(input.l) { ($0, $1) }
您可以通过使用
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 和 L 可观测值:
R
.withLatestFrom(L) { ($0, $1) }
.subscribe(onNext: { r, l in
print("\(r)\(l)")
})
因此 R 将是触发可观察量,并且它将始终从 L 中获取最后一个值