我正在使用Codable带有JSON数据的Swift 4 协议。我的数据经过格式化,以使得在根级别只有一个键,并且包含一个包含我所需属性的对象值,例如:
Codable
{ "user": { "id": 1, "username": "jdoe" } }
我有一个User可以解密user密钥的结构:
User
user
struct User: Codable { let id: Int let username: String }
由于id和username是的属性user,而不是根目录级别,因此我需要制作一个包装器类型,如下所示:
id
username
struct UserWrapper: Codable { let user: User }
然后,我可以通过解码JSON UserWrapper,也User可以解码。似乎有很多冗余代码,因为我在每种类型上都需要一个额外的包装。有没有办法避免这种包装模式,或更正确/优雅的方式来处理这种情况?
UserWrapper
您可以使用字典进行解码:用户组合然后提取出用户对象。例如
struct User: Codable { let id: Int let username: String } let decoder = JSONDecoder() let userDictionary = try decoder.decode([String: User].self, from: jsonData)