[英]How to merge two observable to another observable with RxSwift?
How to merge two observable to another observable with RxSwift? 如何使用RxSwift将两个observable合并到另一个observable? In my case:
就我而言:
struct ViewModel {
let items: Observable<[MediaAsset]>
init(type: Observable<AssetMediaType>, provider: DataProvider) {
items = Observable.combineLatest(type, provider.rx.didAuthorize, resultSelector: { (type, status) in
return provider.rx.fetchMedia(type)
})
}
public var didAuthorize: Observable<AuthorizeResult> {
return Observable.create { o in
//....
}
}
public func fetchMedia(_ withType: AssetMediaType) -> Observable<[MediaAsset]> {
return Observable.create { observer in
//....
}
}
but xcode build failed for reason: 但xcode构建失败的原因:
Cannot convert value of type '(AssetMediaType, ) -> Observable<[MediaAsset]>' to expected argument type '( , _) -> _' 无法将类型'(AssetMediaType, ) - > Observable <[MediaAsset]>'的值转换为预期的参数类型'( ,_) - > _'
If you want them to fire at the same time you need to use a Zip 如果你想要它们同时开火你需要使用Zip
let zipped = Observalbe.zip(a, b){$0}
or in your code 或者在你的代码中
struct ViewModel {
let items: Observable<[MediaAsset]>
init(type: Observable<AssetMediaType>, provider: DataProvider) {
items = Observable.zip(type, provider.rx.didAuthorize){$0}
}
Your types are mismatched. 您的类型不匹配。
Assuming that those functions belong to DataProvider.rx, instead of ViewModel, This code: 假设这些函数属于DataProvider.rx,而不是ViewModel,这段代码:
Observable.combineLatest(type, provider.rx.didAuthorize, resultSelector: { (type, status) in
return provider.rx.fetchMedia(type)
})
returns an Observable< Observable<[ViewModel.MediaAsset]>> 返回一个Observable <Observable <[ViewModel.MediaAsset] >>
but you declared items as an Observable<[MediaAsset]> 但您将项目声明为Observable <[MediaAsset]>
items = Observable.combineLatest(type, provider.didAuthorize) { type,status in
return (type,status)
}
.flatMapLatest { type,status in
return provider.fetchMedia(type)
}
Note: It's unclear how you are using status. 注意:目前还不清楚你是如何使用状态的。 I passed it to the flatMapLatest, but it won't be passed along any further.
我将它传递给flatMapLatest,但它不会再传递给它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.