gpt4 book ai didi

swift - 使用 rx Swift 过滤条件

转载 作者:行者123 更新时间:2023-11-30 11:29:32 24 4
gpt4 key购买 nike

我想映射一个字典和 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com