在字典中存储不同的项类型

时间:2015-03-14 20:04:05

标签: arrays swift dictionary

我想将字典存储为:

[String : AnyItem]

因为格式为

["codename" : "title", "image" : UIImage("imageName")]

但是我有一个困难的类型来完成这个。最终目标是拥有一个充满这些类型字典的数组。

1 个答案:

答案 0 :(得分:1)

如果您想要一个可以容纳任何内容的字典值,则需要Any(而不是AnyType

但这将是一个真正的痛苦 - 每当你想要获得价值时,你将不得不每次都隐藏类型,如果你搞砸了,你会得到各种各样的错误。

相反,请考虑使用元组 - 您想要的两种类型的对。您可以命名元素以使其更易于访问:

var images: [(codename: String, image: UIImage)] = []

if let url = NSURL(string: "http://www.gravatar.com/avatar/24d29e1ff91b68642bbef96b43b5e119?s=128&d=identicon&r=PG&f=1"),
    let data = NSData(contentsOfURL: url),
    let image = UIImage(data: data) {

        images.append(codename: "AlexAvatar", image: image)
}

images[0].codename  // name of the first image in the array
images[0].image     // the first image in the array

或者,如果您想要按名称处理图像,为什么不使用“代号”字段作为字典键?

var images: [String:UIImage)] = []

if let url = NSURL(string: "http://www.gravatar.com/avatar/24d29e1ff91b68642bbef96b43b5e119?s=128&d=identicon&r=PG&f=1"),
    let data = NSData(contentsOfURL: url),
    let image = UIImage(data: data) {

        images["AlexAvatar"] = image
}

for (codename, image) in images {
    // iterate over the codename/image pairs
}

如果您的实际数据要求更复杂,请考虑使用结构而不是元组。