簡體   English   中英

如何使用RxSwift將兩個observable合並到另一個observable?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM