ios - 在结构的运行时更改属性的名称

标签 ios swift struct

<分区>

来自 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 结构就更好了。

关于ios - 在结构的运行时更改属性的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714688/

相关文章:

ios - 使用 NSURLSession 的 SFTP 不工作

ios - 添加 UIViewController 作为 UIScrollView 的 subview

ios - 返回 Nil 的 MPMediaItem 发布日期(Swift 4)

ios - 无法将此 JSON 转换为字符串

ios - UIScrollView:ViewController View 框架更改后滚动内容

ios - 如何使用分钟数据过滤特定的一天时间作为 Swift 3 中多个索引中的单个索引存储到数组中

swift - 如何正确设置委托(delegate)属性? ( swift )

struct - 有没有办法在 Rust 中获取 `struct` 的地址?

带有空格填充的python结构包

C - 结构有太多的初始化值