2016-07-07 9 views
1

は、私はこのような2つの方法を持っています。だから私はこれがFlatMapでできることだと思った。しかし、私はこれらをどのようにチェーン化するのか分かりません。RXSwift 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>>') 

両方の方法は、観測を戻ってきているので、私は問題が表示されないのですか?

+1

'saveTonics'で宣言された戻り値の型をObservable からObservable <[Tonic]>に変更する必要があります。または、同じ変更をキャストすることもできます(常にそうであることが確かな場合)。 – Putz1103

+0

ありがとうございます。私はコードに入っていて、私はそれを書いたのとは違っていました:-)。 – user1007522

答えて

2

saveTonicsで宣言された戻り値の型をObservableからObservableに変更する必要があります。< [Tonic]>。または、同じ変更をキャストすることもできます(常にそうであることが確かな場合)。

関連する問題