【问题标题】:Struct in Swift accesing multi-nested structSwift中的结构访问多嵌套结构
【发布时间】:2021-09-15 14:39:49
【问题描述】:

我正在学习 Swift,希望得到以下方面的帮助:

我正在阅读以下 JSON 文件格式:

{
   "usd":{
      "code":"USD",
      "rate":0.087722492431105,
      "inverseRate":11.399584898769
   },
   "eur":{
      "code":"EUR",
      "rate":0.074110125979945,
      "inverseRate":13.493432736447
   }
}

Struct Currencies: Codable {
        let usd: USD
        let eur: EUR
struct USD: Codable {
        let name: String
        let rate: Double
        let inverseRate: Double
    }
struct EUR: Codable {
    let name: String
        let rate: Double
        let inverseRate: Double
}

我希望能够传入一个参数变量 XXXXX,它可以让我打印出例如 (Currencies.XXXXX.rate),我可以让 XXXXX 成为 eur、usd 等。什么是最好的处理此数据集的方法和/或调用正确变量的问题? 提前致谢

【问题讨论】:

  • 只需调用您定义的常量...让 currency = your_decode_code_here。然后调用currency.usd.rate

标签: ios json swift


【解决方案1】:

你可以试试

 let res = try JSONDecoder().decode([String:Currency].self,from:data)
 print(Array(res.keys)) 
 print(res["usd"]) 

struct Currency: Codable {
  let name: String
  let rate,inverseRate: Double 
}

【讨论】:

    【解决方案2】:

    我为你详细说明一下。 因此,当您解码到第一个结构时,您正在解码为 Json 中的字符串 usd 键入 USD。 USD 还具有用于解码字典以在 JSON 中使用的属性。

     let currencies = // Your decode strategy
     currencies.usd //is a struct of USD
     currencies.usd.rate //calls the property rate on type USD on type Currencies 
    

    如果您询问解码策略,您可能需要重新表述问题。例如:

      let json = """
            {
            "usd":{
            "code":"USD",
            "rate":0.087722492431105,
            "inverseRate":11.399584898769
            },
            "eur":{
            "code":"EUR",
            "rate":0.074110125979945,
            "inverseRate":13.493432736447
            }
            }
            """.data(using: .utf8)
        let cur = try? JSONDecoder().decode(Currencies.self, from: json!)
        print( cur!.usd.rate )
    

    【讨论】:

      猜你喜欢
      • 2017-02-19
      • 2019-06-24
      • 2023-03-17
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 2014-09-11
      相关资源
      最近更新 更多