2017-07-28 92 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