Swift 4 Codable;如何使用单个根级密钥解码对象

约书亚·布雷登(Joshua Breeden):

我正在使用Codable带有JSON数据的Swift 4 协议。我的数据经过格式化,以使得在根级别只有一个键,并且包含包含我所需属性的对象值,例如:

{
  "user": {
    "id": 1,
    "username": "jdoe"
  }
}

我有一个User可以解密user密钥结构

struct User: Codable {
  let id: Int
  let username: String
}

由于idusername是的属性user,而不是根目录级别,因此我需要制作一个包装器类型,如下所示:

struct UserWrapper: Codable {
  let user: User
}

然后,我可以通过解码JSON UserWrapper,也User可以解码。似乎有很多冗余代码,因为我需要为每种类型添加一个额外的包装器。有没有办法避免这种包装模式,或更正确/优雅的方式来处理这种情况?

奥利:

您可以使用字典进行解码:用户组合然后提取出用户对象。例如

struct User: Codable {
    let id: Int
    let username: String
}

let decoder = JSONDecoder()
let userDictionary = try decoder.decode([String: User].self, from: jsonData)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章