ios - 在结构运行时更改属性的名称
问题描述
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
}
}
'''
解决方案
尝试在运行时更改属性的名称是解决此问题的错误方法。一个更好的解决方案是将您的 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 结构,那就更好了。
推荐阅读
- python - Tweepy api.list_direct_messages() 更新缓慢
- c# - 捕获来自 Prism EventAggregator 的所有消息
- python - 从使用 librosa.feature.mfcc 生成的 MFCC 获取时序信息
- python-3.x - 如何让 knitr 输出 python 3 代码并使其在 R 块中可用?
- github-actions - 如果我输入注释,运行命令并添加提交的 GitHub 操作
- node.js - 无法通过 fs.open() 命令创建文件,即使该文件之前不存在
- python - scikit-build 纯 Python 包
- bash - 时髦的。获取部分值被参数化的参数值
- javascript - 工具提示上按月计算的折线图总计
- android - 创建可执行的 android / apk game maker 2 出错,(我使用 android studio)