我在将RxSwift应用到我的应用程序时遇到问题。我的问题是: 如果我有许多输入信号(具有不同元素的变量)可以由用户更改,并且我想要构建一个Observable信号。我想我应该使用某种组合运算符,但是例如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
的setup outQuery的问题。当其中一个输入参数发生变化时,必须发出MWItemQuery
信号。然后将MWItemQuery
发送到api以从服务器获取数据,并使用用户选择的最新过滤器。我有很多其他输入滤波器信号,我不知道是否有任何操作员可以帮助我。
答案 0 :(得分:2)
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)
答案 1 :(得分:0)
您可以使用combineLatest运算符,它可以组合2..8 myList.index(ans)
。
有不同的版本可以使用不同数量的observables
。