我想映射一个字典 和 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]>”返回类型
最佳答案
问题是你的函数的返回类型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/