Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化';顶部';Swift中的结构_Swift - Fatal编程技术网

初始化';顶部';Swift中的结构

初始化';顶部';Swift中的结构,swift,Swift,我目前正试图用Swift初始化一个结构,它有好几个结构深度。一旦调用了外部API,它就会发回我想要放入结构中的数据,以便我可以使用它来填充TableView 我想解码如下所示的数据: { "data": { "1": { "name": "Bitcoin", "quote": { "GBP": { &quo

我目前正试图用Swift初始化一个结构,它有好几个结构深度。一旦调用了外部API,它就会发回我想要放入结构中的数据,以便我可以使用它来填充TableView

我想解码如下所示的数据:

{
  "data": {
    "1": {
      "name": "Bitcoin",
      "quote": {
        "GBP": {
          "price": 25794.72142905233,
          "percent_change_1h": -1.4133929,
          "percent_change_24h": -0.74636982,
          "percent_change_7d": -5.8533249
        }
      }
    },
    "52": {
      "name": "XRP",
      "quote": {
        "GBP": {
          "price": 0.7157097479533718,
          "percent_change_1h": -1.35513268,
          "percent_change_24h": 1.84172355,
          "percent_change_7d": 5.05130272
        }
      }
    }
}
struct Coin: Codable {
    let data: [String: Datum]
}

struct Datum: Codable {
    let name: String
    let quote: Quote
}

struct Quote: Codable {
    let gbp: Gbp

    enum CodingKeys: String, CodingKey {
        case gbp = "GBP"
    }
}

struct Gbp: Codable {
    let price, percentChange1H, percentChange24H, percentChange7D: Double

    enum CodingKeys: String, CodingKey {
        case price
        case percentChange1H = "percent_change_1h"
        case percentChange24H = "percent_change_24h"
        case percentChange7D = "percent_change_7d"
    }
}
为此,我有以下结构:

  • 引用数据的Coin结构
  • 引用“1”和“52”的基准结构
  • 引用“Quote”的Quote结构
  • 引用“价格”、“变化百分比”的GBP结构
  • 这些看起来像这样:

    {
      "data": {
        "1": {
          "name": "Bitcoin",
          "quote": {
            "GBP": {
              "price": 25794.72142905233,
              "percent_change_1h": -1.4133929,
              "percent_change_24h": -0.74636982,
              "percent_change_7d": -5.8533249
            }
          }
        },
        "52": {
          "name": "XRP",
          "quote": {
            "GBP": {
              "price": 0.7157097479533718,
              "percent_change_1h": -1.35513268,
              "percent_change_24h": 1.84172355,
              "percent_change_7d": 5.05130272
            }
          }
        }
    }
    
    struct Coin: Codable {
        let data: [String: Datum]
    }
    
    struct Datum: Codable {
        let name: String
        let quote: Quote
    }
    
    struct Quote: Codable {
        let gbp: Gbp
    
        enum CodingKeys: String, CodingKey {
            case gbp = "GBP"
        }
    }
    
    struct Gbp: Codable {
        let price, percentChange1H, percentChange24H, percentChange7D: Double
    
        enum CodingKeys: String, CodingKey {
            case price
            case percentChange1H = "percent_change_1h"
            case percentChange24H = "percent_change_24h"
            case percentChange7D = "percent_change_7d"
        }
    }
    
    然后我尝试在变量名“coins”下设置一个空“Coin”结构的变量,如下所示:

    var coins = Coin()
    
    很遗憾,尝试执行此操作会提示以下错误:

    调用中缺少参数“data”的参数

    如果我随后按照提示操作,我可以插入以下内容:

    var coins = Coin(data: [String : Datum])
    
    但这会产生以下错误:

    无法将类型“[String:Datum].type”的值转换为预期值 参数类型“[String:Datum]”


    有人能指出这里出了什么问题吗?我是否错误地构建了结构?我能做什么呢?

    而不是
    [String:Datum]
    ,编译器告诉您这是
    类型
    ,使用
    [:]
    ,这是空
    字典
    的快速语法:

    var coins = Coin(data: [:])
    

    与其使用编译器告诉您是
    类型的
    [字符串:数据]
    ,不如使用
    [:]
    ,这是空
    字典的快速语法

    var coins = Coin(data: [:])
    

    工作得很好。谢谢你的回复!工作得很好。谢谢你的回复!