将多个不同的 observable 组合成一个 observable
Combining multiple different observables into one observable
我在将 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
}
}
所以我在设置发出信号的 outQuery 时遇到问题 MWItemQuery
。当其中一个输入参数更改时,必须发出 MWItemQuery
信号。然后将 MWItemQuery
发送到 api 以使用用户选择的最新过滤器从服务器获取数据。我还有很多其他的输入滤波信号,不知道有没有哪位运营商能帮帮我。
可以使用combineLatest运算符,它可以合并2..8observables
。
有不同版本取不同数量的observables
.
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)
我在将 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
}
}
所以我在设置发出信号的 outQuery 时遇到问题 MWItemQuery
。当其中一个输入参数更改时,必须发出 MWItemQuery
信号。然后将 MWItemQuery
发送到 api 以使用用户选择的最新过滤器从服务器获取数据。我还有很多其他的输入滤波信号,不知道有没有哪位运营商能帮帮我。
可以使用combineLatest运算符,它可以合并2..8observables
。
有不同版本取不同数量的observables
.
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)