【发布时间】:2019-10-07 02:44:44
【问题描述】:
我正在与喜欢将 json 主体封装在另一个对象(例如数据)中的后端开发人员合作:
例子:
GET:/用户/当前:
{
data: {
firstName: "Evan",
lastName: "Stoddard"
}
}
我只想在响应上调用 json decode 以获取我创建的用户结构,但添加的数据对象需要另一个结构。为了解决这个问题,我创建了一个通用模板类:
struct DecodableData<DecodableType:Decodable>:Decodable {
var data:DecodableType
}
现在我可以获取我的 json 负载,如果我想获取一个用户结构,只需获取我的模板的数据属性:
let user = JSONDecoder().decode(DecodableData<User>.self, from: jsonData).data
这一切都很好而且很花哨,直到有时,关键 data 并不总是 data。
我觉得这很可能是相当微不足道的东西,但是有没有办法可以在模板定义中添加一个参数,以便我可以更改枚举编码键,因为该数据键可能会更改?
类似以下内容?
struct DecodableData<DecodableType:Decodable, Key:String>:Decodable {
enum CodingKeys: String, CodingKey {
case data = Key
}
var data:DecodableType
}
这样我可以传入目标可解码类以及封装该对象的键。
【问题讨论】:
-
请查看您得到的错误:枚举大小写的原始值必须是文字。
-
你总是在编译时知道密钥是什么,还是只在运行时才知道?
-
@vadian 我知道这个错误,因此我问这个问题。
-
@robmayoff 我会在编译时知道
标签: ios swift decodable jsondecoder