swift - 使用 rx Swift 过滤条件

标签 swift filter rx-swift

我想映射一个字典 和 flatMap 返回一个新的 Observable。 我正在尝试 Observable,因为我可能是 1 个单个对象或一个对象数组。

func fetchRibsList() -> Observable<[LCLRibAccount]>  {
        return provider.rxDict(service: .fetchRibsList)
            .map({ (dict, _) -> [String: Any] in
                return dict
            })
            .filter({ dict -> Bool in
                dict["ribs"] != nil
            })
            .filter({ dict -> Bool in
                dict["rib"] != nil
            })
            .flatMap({ dict -> Observable<Any> in

                //return either list of ribs or 1 single rib
                if let ribs = dict["ribs"] as? [String: Any] {
                    return Observable.just(LCLRib.parseAccountList(with: ribs))
                }

                if let rib = dict["rib"] as? [String: Any] {
                    return Observable.just(LCLRib.parseRib(with: rib))
                }

                return Observable.empty()
            })
    }

是否可以包含带有 2 个 flatMap 的条件并返回一个数组或 1 个单个对象 问题是我需要具体说明 Observable 类型:

这是我得到的错误:无法将“Observable”类型的返回表达式转换为“Observable<[LCLRibAccount]>”返回类型

enter image description here

最佳答案

问题是你的函数的返回类型func fetchRibsList() -> Observable<[LCLRibAccount]> 。它需要一个数组的 Observable。也许您可以将单个对象包装在数组中。像这样:

func fetchRibsList() -> Observable<[LCLRibAccount]>  {
    return provider.rxDict(service: .fetchRibsList)
        .map({ (dict, _) -> [String: Any] in
            return dict
        })
        .filter({ dict -> Bool in
            dict["ribs"] != nil
        })
        .filter({ dict -> Bool in
            dict["rib"] != nil
        })
        .flatMap({ dict -> Observable<[LCLRibAccount]> in

            //return either list of ribs or 1 single rib
            if let ribs = dict["ribs"] as? [String: Any] {
                return Observable.just(LCLRib.parseAccountList(with: ribs))
            }

            if let rib = dict["rib"] as? [String: Any] {
                return Observable.just([LCLRib.parseRib(with: rib)]) //wrap single object in array
            }

            return Observable.empty()
        })
}

关于swift - 使用 rx Swift 过滤条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50391137/

相关文章:

ios - Swift 通过 UITabBarController 访问 viewController 的函数

JavaScript - 删除两个数组之间的多个相同值

ios - 如何在处理 catchError 后恢复数据源

ios - 无法推断出 RxDataSources `Generic parameter ' Self'

swift - 在测试属性是否存在时正确使用 guard 是什么

ios - 有什么方法可以在运行时按 UITableView 中的属性对项目进行分组?

python - 迭代两个列表进行过滤

ios - 如何使用 RxAlamofire 在帖子正文中传递 json 进行帖子调用

ios - 无法以字符串格式获取日期

wordpress - 将特色图像添加到 wp_nav_menu 项目