Skip to content

15.2_访问修改键值对

访问字典中的值

访问字典中的值非常简单!你可以使用键来获取对应的值。就像查字典一样,你输入一个词(键),字典会返回它的定义(值)。在 Swift 中,你可以使用下标语法 [键] 来访问字典中的值。如果字典中存在该键,则会返回对应的值;如果不存在,则会返回 nil

swift
var 学生信息 = ["姓名": "张三", "年龄": "20", "学号": "12345"]
let 姓名 = 学生信息["姓名"] // 姓名 的值为 "张三"
let 班级 = 学生信息["班级"] // 班级 的值为 nil,因为字典中没有 "班级" 这个键

请记住,字典返回的值是可选类型(Optional)。这意味着它可能包含一个值,也可能不包含任何值(nil)。因此,在使用字典的值之前,你需要解包(unwrap)它。你可以使用可选绑定(Optional Binding)或强制解包(Force Unwrapping)来解包可选值。

修改字典中的值

修改字典中的值也很容易!你可以使用下标语法 [键] = 新值 来修改字典中键对应的值。如果字典中存在该键,则会更新对应的值;如果不存在,则会添加一个新的键值对。

swift
var 学生信息 = ["姓名": "张三", "年龄": "20", "学号": "12345"]
学生信息["年龄"] = "21" // 修改 "年龄" 的值为 "21"
学生信息["性别"] = "男"   // 添加一个新的键值对 "性别": "男"

你还可以使用 updateValue(forKey:) 方法来修改字典中的值。这个方法会返回一个可选类型的值,表示之前该键对应的值。如果字典中不存在该键,则会返回 nil

swift
var 学生信息 = ["姓名": "张三", "年龄": "20", "学号": "12345"]
let 旧年龄 = 学生信息.updateValue("22", forKey: "年龄") // 旧年龄 的值为 "21"
let 旧地址 = 学生信息.updateValue("北京", forKey: "地址") // 旧地址 的值为 nil,因为字典中没有 "地址" 这个键

使用可选绑定安全地访问和修改值

为了避免因强制解包 nil 值而导致的运行时错误,建议使用可选绑定来安全地访问和修改字典中的值。可选绑定允许你检查可选类型是否包含值,并在包含值的情况下将其解包到一个临时常量或变量中。

swift
var 学生信息 = ["姓名": "张三", "年龄": "20", "学号": "12345"]

if let 姓名 = 学生信息["姓名"] {
    print("姓名是:\(姓名)") // 如果 "姓名" 存在,则打印姓名
} else {
    print("字典中没有姓名信息") // 如果 "姓名" 不存在,则打印提示信息
}

if let 旧年龄 = 学生信息.updateValue("22", forKey: "年龄") {
    print("旧年龄是:\(旧年龄)") // 如果 "年龄" 存在,则打印旧年龄
} else {
    print("字典中没有年龄信息") // 如果 "年龄" 不存在,则打印提示信息
}

示例:更新学生信息

假设你有一个学生信息字典,你需要更新学生的年龄和地址。你可以使用以下代码来实现:

swift
var 学生信息 = ["姓名": "李四", "年龄": "19", "学号": "54321"]

// 更新年龄
if let 年龄 = 学生信息["年龄"] {
    学生信息["年龄"] = String(Int(年龄)! + 1) // 年龄加 1
}

// 添加地址
学生信息["地址"] = "上海"

print(学生信息) // 输出更新后的学生信息

字典访问和修改的注意事项

  • 确保你使用的键与字典中存在的键完全匹配(包括大小写)。
  • 使用可选绑定来安全地访问和修改字典中的值,避免运行时错误。
  • 字典中的键必须是可哈希的(Hashable),这意味着它们必须提供一种方法来计算它们的哈希值。Swift 的基本类型(如 StringIntDoubleBool)都是可哈希的。
  • 字典中的值可以是任何类型。🎉
  • 字典是无序的,这意味着你不能依赖于键值对在字典中的顺序。
  • 字典在处理键值对集合时非常有用,例如存储配置信息、用户信息等。🚀

本站使用 VitePress 制作