2016-02-19 153 views
4

我想做一个类似于JSON包的复杂的Swift Dictionary声明。然而,编译器正在与我的牙齿和指甲打架。这是我想要做的:Swift 2.0:如何声明嵌套字典?

var icons: [[Any:Any]] = [ 
    "categories:":[ 
     ["cat2" : [ 
      ["name":"ImageName","type":"image"], 
      ["name":"ImageName","type":"scroll","panel":panel1], 
      ["name":"ImageName","type":"chooser","panel":[ 
       ["name":"ImageName"]]] 
      ] 
     ], 
     ["cat2" : ["name":"ImageName"]], 
     ["cat3" : ["name":"ImageName"]], 
     ["cat4" : ["name":"ImageName"]], 
     ["cat5" : ["name":"ImageName"]] 
    ], 
    "size":["x":"128","y":"128"] 
] 

我不知道如何声明这一点。正如你所看到的,我将第一个元素作为字符串,将下列子元素作为附加字典。

我想知道Swift中这些数据结构的最佳实践方法。

预先感谢您。

+0

不建议在Swift中创建这样的结构,但如果您真的想要这样做,您可以分开创建每个部分。防爆。 'let subDict = [“cat2”:[“name”:“ImageName”]]'并将它们稍后合并到 – Breek

+0

Gotcha。我很惊讶,大家不需要更频繁。随着JSON在10年前的发展并且是包含数据的标准形式,它让我感到困惑,Swift没有这种类型声明的简单方法。泰! –

回答

4

正确的方法是不是使用字典。

您应该创建几个模型类型(最好是structs)并将它们组合。

否则管理这样的字典将是地狱。

+2

那是有道理的。这是地狱。 ;) –

+0

@MarkLöwe:我相信你:D –

1

在这种情况下,你实际上宣告字典的数组,而不是词典的词典:[Any:[Any:Any]](或更好,但给你的数据)[String:[String:Any]]但是,这是行不通的,因为categories键值实际上是一个数组,而不是一个字符串。在这一点上,你只剩下[String:Any]

然而,最重要的是你会更好地采取@ appzYourLife的方法并定义合适的模型类型。

+0

谢谢!你正在描述我的连续错误。 :) –