ios - RXSwift flatMap 两种方法

标签 ios swift swift2 rx-swift

我有两种这样的方法:

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>>')

我没有看到问题,因为这两种方法都返回 Observables?

最佳答案

您需要将 saveTonics 中声明的返回类型从 Observable 更改为 Observable<[Tonic]>。或者您可以进行相同的更改(如果您确定情况总是如此)。

关于ios - RXSwift flatMap 两种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38252111/

相关文章:

swift - 如何在 Swift 2.0 中处理掩码(枚举)?

ios - 在 Swift 2、Xcode 7.0.1 中使用 'self'

swift - 如何为导航栏 AppDelegate Swift 设置图像

android - 介于IOS和安卓之间的谷歌

ios - 如何在推文中添加照片库(或相机)的图像?

ios - 使用 max-age=0 自动过期 NSURLCache

ios - 如何快速将特定格式转换为任何对象?

ios - iPad3 - 将相机拍摄的照片保存到应用程序的文档文件夹中

ios - Realm - 列表与结果。速度和尺寸

swift - 从单例初始化程序中抛出异常