[英]How to Map one Observable<T> to another type Observable<E> in RxSwift?
[英]How to merge two observable to another observable with RxSwift?
如何使用RxSwift將兩個observable合並到另一個observable? 就我而言:
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
//....
}
}
但xcode構建失敗的原因:
無法將類型'(AssetMediaType, ) - > Observable <[MediaAsset]>'的值轉換為預期的參數類型'( ,_) - > _'
如果你想要它們同時開火你需要使用Zip
let zipped = Observalbe.zip(a, b){$0}
或者在你的代碼中
struct ViewModel {
let items: Observable<[MediaAsset]>
init(type: Observable<AssetMediaType>, provider: DataProvider) {
items = Observable.zip(type, provider.rx.didAuthorize){$0}
}
您的類型不匹配。
假設這些函數屬於DataProvider.rx,而不是ViewModel,這段代碼:
Observable.combineLatest(type, provider.rx.didAuthorize, resultSelector: { (type, status) in
return provider.rx.fetchMedia(type)
})
返回一個Observable <Observable <[ViewModel.MediaAsset] >>
但您將項目聲明為Observable <[MediaAsset]>
items = Observable.combineLatest(type, provider.didAuthorize) { type,status in
return (type,status)
}
.flatMapLatest { type,status in
return provider.fetchMedia(type)
}
注意:目前還不清楚你是如何使用狀態的。 我將它傳遞給flatMapLatest,但它不會再傳遞給它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.