簡體   English   中英

RXSwift flatMap兩種方法

[英]RXSwift flatMap two methods

我有兩種這樣的方法:

func rxGetAllTonicsForLanguage(language: Language) -> Observable<AnyObject?>
func saveTonics(list: [Tonic]) -> Observable<AnyObject?>

現在,我想先執行getAllTonics調用,然后根據該調用的結果執行下一個操作。 所以我認為這是我可以使用FlatMap進行的工作。 但是我被困住了,我不知道如何將它們鏈接起來。

我嘗試如下:

   self.remoteService.rxGetAllTonicsForLanguage(language)
        .subscribeOn(ConcurrentDispatchQueueScheduler(globalConcurrentQueueQOS: .Background))
        .flatMap{tonics -> Observable<[Tonic]> in
            print("Tonics: \(tonics)")
            let x = tonics as! [Tonic]
            return TonicAdapter.sharedInstance.saveTonics(x)
    }.observeOn(MainScheduler.instance)
        .subscribe({ e in
            switch e {
            case .Next(let element):
                if let result = element as? String {
                    DDLogDebug("Saved something \(result)")
                }
            case .Error(let e):
                DDLogError("Error in save tonics \(e)")
            case .Completed:
                DDLogDebug("Completed save tonics")
            }
            }
        ).addDisposableTo(self.disposeBag)

它在返回TonicAdapter的行上給了我這個錯誤:

Cannot convert return expression of type 'Observable<AnyObject?>' (aka 'Observable<Optional<AnyObject>>') to return type 'Observable<[Tonic]>' (aka 'Observable<Array<Tonic>>')

我看不到問題,因為這兩種方法都返回了Observable?

您需要將saveTonics中聲明的返回類型從Observable更改為Observable <[Tonic]>。 或者,您可以進行相同的更改(如果可以肯定會一直如此)。

func rxGetAllTonicsForLanguage(language: Language) -> Observable<[Tonic]>
func saveTonics(list: [Tonic]) -> Observable<AnyObject?>

rxGetAllTonicsForLanguage的輸出可以像這樣傳遞給saveTonics

rxGetAllTonicsForLanguage
    .flatMapLatest(saveTonics)
    .subscribe(...)
    .disposed(by: disposeBag)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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