您的评论描述的用例与问题描述的不同......
每次击键都会更改 updatedValue ,仅当点击更新按钮时才调用 isChanged ,而 savedValue 是原始值。
以上暗示您想要类似的东西:
func example<Value>(savedValue: Value, isChanged: Observable<Void>, updatedValue: Observable<Value>) -> Observable<Value> {
isChanged
.withLatestFrom(updatedValue)
.startWith(savedValue)
}
以上将发出savedValue,然后发出updatedValue每次isChanged发出的最后一次发出的内容。我建议您将名称更改为isChanged其他名称,因为它不是布尔值。
同时,这个问题意味着您想要更多类似的东西:
func exampleʹ<Value>(savedValue: Value, isChanged: Observable<Bool>, updatedValue: Observable<Value>) -> Observable<Value> {
isChanged
.withLatestFrom(updatedValue) { $0 ? savedValue : $1 }
}
每次发出一个值时,上面也会isChanged发出一个值。savedValue每当isChanged发出 false 和发出 trueupdatedValue时,它都会发出isChanged。
如果savedValue是 Observable(可能来自网络请求或 DB 获取),那么代码看起来更像这样:
func example<Value>(isChanged: Observable<Void>, savedValue: Observable<Value>, updatedValue: Observable<Value>) -> Observable<Value> {
savedValue
.concat(
isChanged.withLatestFrom(updatedValue)
)
}
func exampleʹ<Value>(isChanged: Observable<Bool>, savedValue: Observable<Value>, updatedValue: Observable<Value>) -> Observable<Value> {
isChanged
.withLatestFrom(Observable.combineLatest(savedValue, updatedValue)) { $0 ? $1.0 : $1.1 }
}