2016-07-23 103 views
0

我有一個需要放置在字典中的變量對象集。我試圖將它們添加到字典中的for loop,但從我理解的字典是不可變的,因此它們需要立即聲明。如何創建未預先確定的項目的字典列表?在Swift中創建循環字典

var newItems = [:] 

for item in self.items{ 
    newItems["\(item.key)"]["name"] = "A new item" 
} 

回答

0

不使用第二個值

var newItems : [String:String] = [:] 

for i in 1..10{ 
    newItems[i.description] = "A new item" 
} 

瞭解更多信息https://www.weheartswift.com/dictionaries/

+0

大約有10多個屬性分配時是。我只列出一個演示概念 –

+0

如果你是什麼關鍵是你使用這個newItems的一個字符串[item.key.description] –

+0

等一分鐘我會去mi mac幫你 –

0

與原代碼的問題是,字典只有一個鍵,所以這個構建newItems["\(item.key)"]["name"]語法不正確。如果您擁有固定數量的屬性,則可以使用一個結構並將其放入字典中。然而,當你提出這個問題時,你需要創建一個字典,其中存儲的元素本身就是字典。所以,雖然我並沒有真正把這個變成Xcode的,它是你需要做的模板:

var newItems = [:[:]]() 

for item in self.items { 
    var itemDict = [:]() 
    for prop in whereeveryourpropertiescomefrom { 
     itemDict[prop] = valueforthisproperty 
    } 
    newItems["\(item.key)"] = itemDict   
} 

當然,如果你的屬性最初存儲在一個字典獨特此文件(相當於內部循環),只需將其直接存儲到newItems中即可。

然後,你可以參考的東西作爲

let value = newItems["\(item.key)"]?.["property key"] 

通知辭典檢索返回一個可選的,你必須處理。

+0

這似乎比我現在做的更乾淨。出於某種原因,我無法使用[:[:]]() –

+0

聲明字典。無可否認,它是一個模板。根據你在做什麼,內部字典可能需要'[String:AnyObject]'或'[String:String]'。然後,外層變成'[String:whatevertjheinneroneis]',比如[String:'[String:AnyObject]]' – Feldur

+0

我試過[:[String:AnyObject]]但是出現錯誤「容器中的預期表達式」 –

0

溶液初始化字典創建另一個詞典

var newItems: [String:[String:AnyObject]]()