麻烦在Swift中解压缩字典

时间:2014-07-09 06:13:31

标签: ios dictionary swift

我有一段时间试图在Swift中使用Dictionaries。我创建了以下字典词典,但我无法解压缩。

var holeDictionary = Dictionary<String,Dictionary<String,Dictionary<String,Int>>>()

我可以通过以下方式获得第一个词典:

var aDictionary = holeDictionary["1"]

但是尝试访问其中的下一个词典会给我一个错误,如下所示:

var bDictionary = aDictionary["key"]  // [String : Dictionary<String, Int>]?' does not have a member named 'subscript'

我知道字典的内容是什么,可以用println(aDictionary)验证它们。那么我怎样才能深入到埋藏的字典中呢?

2 个答案:

答案 0 :(得分:3)

Dictionary上的键下标返回一个可选项,因为键值对可能存在于字典中,也可能不存在。

您需要使用if-let绑定或强制解包可选项,然后才能访问它以进一步下标:

if let aDictionary = holeDictionary["1"] {
    let bDictionary = aDictionary["key"]
}

编辑,添加强制解包示例:

如果您确定密钥"1"存在,并且如果密钥不存在,您可以在运行时使用assert(),那么您可以强制执行 - 像这样解开可选项:

let bDictionary = holeDictionary["1"]!["key"]

如果您确定密钥"key"将存在,那么您可以这样做:

let bDictionary = holeDictionary["1"]!["key"]!

答案 1 :(得分:3)

根据快速文件:

Because it is possible to request a key for which no value exists, 
a dictionary’s subscript returns an optional value of the dictionary’s 
value type

从字典中检索项目时,会返回一个可选值。处理案件的正确方法是:

var holeDictionary = Dictionary<String,Dictionary<String,Dictionary<String,Int>>>()
if let aDictionary = holeDictionary["1"] {
    var bDictionary = aDictionary["key"]
}