RxSwift - withLatestFrom 组合两个可观察值的值

问题描述 投票:0回答:4

我想要达到这样的结果:

L -1-2-3------4------5-6-7-8----
R ---------A------B----------C--

O ---------A3-----B4---------C8

所以基本上类似于 withLatestFrom 但组合了两个可观察值的值(例如组合最新)。

我想没有现成的操作员可以做到这一点。知道如何实现这一目标吗?

swift reactive-programming rx-swift
4个回答
24
投票

只需使用

withLatestFrom
中的结果选择器即可。没有闭包的重载实现只是忽略第一个可观察的。例如:

Observable.just("one")
  .withLatestFrom(Observable.just(1)) 
  { oneAsString, oneAsInt in return (oneAsString, oneAsInt) }

3
投票

R = input.r 且 L = input.l 的简短版本

let output = input.r
.withLatestFrom(input.l) { ($0, $1) }

2
投票

您可以通过使用

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
}

0
投票

看起来你可以交换 R 和 L 可观测值:

    R
       .withLatestFrom(L) { ($0, $1) }
       .subscribe(onNext: { r, l in
           print("\(r)\(l)")
       })

因此 R 将是触发可观察量,并且它将始终从 L 中获取最后一个值

© www.soinside.com 2019 - 2024. All rights reserved.