2016-07-23 67 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]]()