【发布时间】:2019-03-07 15:15:58
【问题描述】:
所以我有这个 API 可以返回 [String: Any] 的字典,我知道 Any 是 Decodable 或 Decodable 的数组,但是我终生无法弄清楚如何采取该字典并将其解码为某种结构:
我所拥有的基本上是这样的:
public func call<T: Codable> (completion handler: @escaping (T?) -> ()) {
let promise = api.getPromise ()
promise.done (on: DispatchQueue.main, { (results: [String:Any])
let decodedResults:T? = results.decode (as: T.self) // <-- this is what I want
handler (decodedResults)
})
}
我尝试将其转换为数据,然后使用以下代码对其进行解码:
let values = results.compactMap { $0.value }
let data = JSONSerialization.data (withJSONObject: values, options: [])
let decodedResult = JSONDecoder().decode(T.self, from: data)
但它总是以NSInvalidArgumentException 失败,知道如何解决这个问题吗?
我试图实现但未能做到的另一件事是将值转换为元组,但我发现动态创建元组是不可能的。
【问题讨论】:
-
您应该更改您的
api.getPromise()方法以返回data承诺,而不是[String: Any] -
这不是一个真正的选择,因为api已经将不是由swift原语组成的数据解码为几个swift结构,还有其他方法吗,或者我别无选择,只能去@ 987654330@
-
我也需要这个!除了我需要对其进行编码