API的JSON数据包含各种货币的比特币价格。我需要在运行时修改结构,以使其与数据中的键匹配。
初始化,类型别名和泛型无效!
'''
struct Model {
var content : intel
}
struct intel {
let last : Float
let averages : day
let timestamp : Int64
let bid : Float
let ask : Float
}
struct day {
let day : Float
}
//Intend to change literal value of content at runtime
//Sample Data!
{
"BTCEUR": {
"last": 9477.207190353169,
"averages": {
"day": 8913.97014278919
},
"timestamp": 1561195263,
"bid": 9473.843088382904,
"ask": 9477.676160131046
},
"BTCUSD": {
"last": 10791.221908483476,
"averages": {
"day": 10149.89204777
},
"timestamp": 1561195263,
"bid": 10787.391373795912,
"ask": 10791.755900918146
}
}
'''
答案 0 :(得分:2)
尝试在运行时更改属性名称是解决此问题的错误方法。更好的解决方案是将JSON解码为字典。
我们可以创建这样的类型别名:
typealias BitcoinData = [String: intel]
并像这样解码数据:
let decoder = JSONDecoder()
let bitcoinData = try! decoder.decode(BitcoinData.self, from: data)
print(bitcoinData["BTCUSD"]!.averages.day) // 10149.892
请注意我们如何使用下标语法访问BTCUSD
。
实际上,您的JSON结构很难解码。如您所见,我们不得不在此处解码为字典。如果您可以更改JSON结构,那就更好了。