You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:31:18