如何制作一个包含两个项目的swift字典,这些项目是其他项目的数组

时间:2015-07-08 04:04:14

标签: swift

我想创建一个包含两个数组的字典(一个键称为“locations”,另一个键是“items”),如下所示:

 var tmpResults = Dictionary("locations",Array)
 tmpResults["items"]=Array

或类似的东西(两者似乎都不起作用):

  var tmpResults = ["locations",:<Location>,"items":<Item>]
  var tmpResults = ["locations":Array(Location),"items":Array(Item)]

但我真的不确定如何在Swift中这样做。我如何指定数组可以容纳的类型?

2 个答案:

答案 0 :(得分:1)

我认为最简单的解决方案是AnyObject

var tmpResults: [String: AnyObject] = [:]
tmpResults["locations"] = [location1, location2, location3]
tmpResults["items"] = [item1, item2, item3]

// Assuming location1, location2, and location3 are all of the same "Location" type
// And item1, item2, and item3 are all of the same "Item" type

使用AnyObject,你的词典对象几乎可以是任何东西。在此示例中,您有一个字典,其中包含Locations和一个键的数组,以及另一个键上的Items数组。

你确实失去了Swift所做的一些不错的类型检查。

修改

实际上,您可以像这样声明它,以便编译器至少知道您的字典包含数组:

var tmpResults: [String: [AnyObject]] = [:]

在任何一种情况下,你都可以使用你可能会这样做的数组:

if let items = tmpResults["items"] as? [Item] {
    // Do something with you items here
}

答案 1 :(得分:0)

为了在数组中保存数组,您可以使用以下代码:

var tempResults : Dictionary<String, Array<String>>

这可以简化为:

var tempResults : [String: [String]]

然后你可以添加你的数组项目:

var array1 : [String] = [String]()
array1.append("location1")
array1.append("location2")
array1.append("location3")

var array2 : [String] = [String]()
array2.append("item1")
array2.append("item2")
array2.append("item3")

最后,您可以将其添加到词典

tempResults["location"] = array1
tempResults["items"] = array2

希望这有帮助!