[英]Swift Codable: Decoding dynamic keys
我正在尝试练习 Swift 的 Codable API。 我发送一个网络请求,每次收到一行,我必须处理动态密钥:
响应示例 1:
{
"EUR": 4695.01
}
响应示例 2:
{
"USD": 479.01
}
响应示例 3:
{
"BTC": 4735.01
}
我尝试了这种方法来解析动态键:
struct ConversionResponseModel: Decodable {
typealias destinationCurrency = String
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
}
}
和我的获取请求:
do {
let myResult = try JSONDecoder().decode(ConversionResponseModel.self, from: data)
print(myResult)
} catch {
print(error)
}
但我得到了这个结果: ConversionResponseModel()
,但不是货币值。 听起来我好像错过了什么。 请提供任何帮助。 谢谢
您快到了。 您获得的 JSON 将返回[String:Double]
的字典。 然后,您可以使用以下方法隐藏它:
struct ConversionResponseModel: Decodable {
typealias DestinationCurrency = String
let currency : DestinationCurrency
let value : Double
init(from decoder: Decoder) throws {
let container = try decoder.singleValueContainer()
let dict = try container.decode([String:Double].self)
guard let key = dict.keys.first else {
throw NSError(domain: "Decoder", code: 0, userInfo: [:])
}
currency = key
value = dict[key] ?? -1
}
}
注意:考虑到 Rob Napier 的评论,您可以将Decimal
替换为Double
- 有关更多详细信息,请参阅他对原始问题的评论
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.