将多个不同的观测值合并为一个可观测的地址
问题描述:
我在使用RxSwift时遇到了问题。我的问题是: 如果我有很多输入信号(具有不同元素的变量),可以由用户更改,并且由于此更改,我想构建一个可观察信号。我想我应该使用某种组合运算符,但例如combineLatest只允许两个参数组合。将多个不同的观测值合并为一个可观测的地址
让我们来看看我有的输入和输出的例子。
import RxSwift
import RxCocoa
class ModelView {
private let api: ApiType
// inputs
let inType: Variable<MWItemQueryType>
let inFilterRetailers: Variable<Set<MWRetailer>>
let inFilterColors: Variable<Set<MWColor>>
let inFilterPriceRanges: Variable<Set<MWPriceRange>>
// outputs
let outQuery: Observable<MWItemQuery>
init(initialType: MWItemQueryType, api: ApiType) {
self.api = api
self.inType = Variable(initialType)
self.inFilterRetailers = Variable(Set<MWRetailer>())
self.inFilterColors = Variable(Set<MWColor>())
self.inFilterPriceRanges = Variable(Set<MWPriceRange>())
// TODO How to setup outQuery signal here
}
}
所以我必须有发射信号MWItemQuery
设置outQuery问题。当其中一个输入参数改变时,必须发出MWItemQuery
信号。 MWItemQuery
然后发送到api从用户选择最新的过滤器从服务器获取数据。我有很多其他输入滤波器信号,我不知道是否有任何运营商可以帮助我。
答
combineLatest
可以接受2个以上的参数!
尝试:
Observable.combineLatest(inType.asObservable(), inFilterRetailers.asObservable(), inFilterColors.asObservable(), inFilterPriceRanges.asObservable())
{ type, filterRetailers, filterColors, filterPriceRanges in
// do something with your data
}
.distinctUntilChanged()
.shareReplay(1)
感谢。有用!我没有找到合适的例子。 –