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

謝謝!你正在描述我的連續錯誤。 :) –