所以我有这个 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)
})
}
Run Code Online (Sandbox Code Playgroud)
我尝试将其转换为数据,然后使用以下方法对其进行解码:
let values = results.compactMap { $0.value }
let data = JSONSerialization.data (withJSONObject: values, options: [])
let decodedResult = JSONDecoder().decode(T.self, from: data)
Run Code Online (Sandbox Code Playgroud)
但它总是失败NSInvalidArgumentException,知道如何解决这个问题吗?
我试图实现但未能做到的另一件事是将值转换为元组,但我发现不可能动态创建元组。