【问题标题】:Parse response of type AnyObject into Codable model将 AnyObject 类型的响应解析为 Codable 模型
【发布时间】:2022-01-29 17:01:20
【问题描述】:

我已经开始了某人的项目,在将响应解析为 Codable 模型时遇到了困难。下面是代码 sn-p,它返回我 resultData as AnyObject

switch response.result {
    case .success(let resultData):
      taskCallback(1, resultData as AnyObject)
    case .failure(let error):
      print(error) 
  }

我一直在尝试将响应解析为 Codable 模型,但它需要我使用 Data 类型的 AnyObject。如何将 AnyObject 转换为 Data 类型。

let model = try JSONDecoder().decode([SomeModel].self, from: resultData)

我无法更改完成处理程序响应,因为它在很多地方都使用过

[这里是responseObject的打印响应截图] [1]:https://i.stack.imgur.com/g6RRM.png

【问题讨论】:

  • 答案很大程度上取决于response 的类型。 Alamofire 5 及更高版本直接支持Codable。而SwiftyJSON 已过时,不应再使用。

标签: json swift alamofire codable


【解决方案1】:

JSON 几乎可以肯定是JSONSerialization 的包装器(没有称为“JSON”的 stdlib 或 Foundation 类型)。所以如果你想把它变成数据,你会再次使用 JSONSerialization。例如:

let data = try JSONSerialization.data(withJSONObject: resultData)

这当然是非常低效的(您正在解码 JSON,重新编码,然后再次解码),但是当您重构以摆脱 AnyObject 和使用 Decodable 进行初始解码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 2021-03-19
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多