Swift创建与读取二维HashMap遇问题:赋值后输出nil求解决
Swift中二维HashMap的正确创建、赋值与读取方法
你的代码执行后打印nil,核心原因是:当你尝试hashMap[7]["height"] = "bla"时,外层字典hashMap中key为7的元素尚未初始化,此时hashMap[7]返回nil,无法直接对nil的内层字典进行赋值操作。
以下是几种正确实现的方式:
1. 先初始化内层字典再赋值
先为外层字典的目标key创建空的内层字典,再进行内层key-value的赋值:
var hashMap = [Int:[String:String]]() // 先初始化key=7对应的内层空字典 hashMap[7] = [String:String]() hashMap[7]["height"] = "bla" hashMap[7]["align"] = "blatoo" print(hashMap[7]["height"]) // 输出 Optional("bla")
2. 直接赋值完整内层字典或结合可选链
可以直接给外层key赋值完整的内层字典,后续若要追加元素,使用可选链确保安全:
var hashMap = [Int:[String:String]]() // 直接赋值完整的内层字典 hashMap[7] = ["height": "bla", "align": "blatoo"] // 追加或修改内层元素时用可选链 hashMap[7]?["align"] = "updatedBlatoo" print(hashMap[7]?["height"]) // 输出 Optional("bla")
3. 利用字典的默认值subscript简化操作
Swift字典支持带默认值的下标访问,当外层key不存在时会自动创建空的内层字典,无需手动初始化:
var hashMap = [Int:[String:String]]() // 使用默认值下标,不存在则自动创建空字典 hashMap[7, default: [:]]["height"] = "bla" hashMap[7, default: [:]]["align"] = "blatoo" print(hashMap[7]?["height"]) // 输出 Optional("bla")
读取值的安全方式
字典的访问返回可选值,推荐使用可选绑定来安全获取值,避免强制解包引发崩溃:
// 可选绑定,安全读取 if let innerDict = hashMap[7], let height = innerDict["height"] { print(height) // 输出 "bla" } // 若确定key一定存在,可使用强制解包(谨慎使用) print(hashMap[7]!["height"]!) // 输出 "bla"
内容的提问来源于stack exchange,提问作者user19559647
相关产品推荐
相关产品推荐

