可选查找
本课属于 Coddy Swift 学习旅程的“逻辑与流程”单元。第 13 课,共 56 课。
字典下标总是返回一个 Optional:键存在时返回对应的值,不存在时返回 nil。Swift 会强制你处理这两种情况。
let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p) // Optional(1)处理可选值的 3 种惯用方式。选择适合当前情况的方式。
1. if let:显式处理两个分支:
if let p = prices["apple"] {
print("apple costs \(p)")
} else {
print("unknown")
}2. nil 合并运算符 ??:直接提供备用值:
let p = prices["olive"] ?? 0 // 03. 带默认值的下标:结果相同,但如果你将值写回该键,默认值也会保留下来:
var counts = ["a": 2]
counts["b", default: 0] += 1 // counts == ["a": 2, "b": 1]挑战
简单给定字典 prices。读取一行输入:用户想购买的商品列表,商品之间用逗号分隔。
按输入顺序逐个查找 prices 中的商品。每个商品输出一行:
- 商品在字典中时,输出
<item> @ <price> - 否则,输出
<item> not sold
列出所有商品后,最后输出一行:Total: <sum>。使用空合并运算符,将缺失商品的价格视为 0。
输入 apple,bread,olive,milk 时,输出为:
apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8亲手试试
let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")
// TODO:逐个查询商品;输出 '@ price' 或 'not sold';用 ?? 0 求和
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Swift 在线编辑器