一尘不染

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

swift

我正在使用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可以解码。似乎有很多冗余代码,因为我在每种类型上都需要一个额外的包装。有没有办法避免这种包装模式,或更正确/优雅的方式来处理这种情况?


阅读 250

收藏
2020-07-07

共1个答案

一尘不染

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

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

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