我有一段时间试图在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)验证它们。那么我怎样才能深入到埋藏的字典中呢?
答案 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"]
}