2017-07-28 60 views
0

我在使用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从用户选择最新的过滤器从服务器获取数据。我有很多其他输入滤波器信号,我不知道是否有任何运营商可以帮助我。

回答

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 observables。 有不同的版本可以输入observables

相关问题