0Pricing
Swift Academy · 课时

串联默认值

整洁地组合多个备用值。

串联默认值 是 CoddyKit 上的免费 Swift Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Swift Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Swift Academy 课程共包含 4 节课。

多个 fallback

有时您会有多个可选值来源,并希望使用其中第一个非空值。这时可以将多个 ?? 运算符串联起来。

let primary: String? = nil
let secondary: String? = "Backup"
let name = primary ?? secondary ?? "Default"
print(name)

如何理解串联写法

将 a ?? b ?? c 理解为:如果 a 不为空就使用它,否则使用 b,再否则使用 c。求值会在找到第一个值时停止。

let a: Int? = nil
let b: Int? = nil
let c = 7
print(a ?? b ?? c)

第一个非空值优先

只要某个可选值提供了值,后面的值就会被忽略。在这里,secondary 生效了,因此最终默认值永远不会被使用。

let primary: Int? = nil
let secondary: Int? = 50
let fallback = 0
print(primary ?? secondary ?? fallback)

除最后一个外都是可选值

在串联表达式中,除最后一个操作数外,其他操作数通常都是可选值。最后一个操作数是一定存在的非可选默认值。

let nick: String? = nil
let full: String? = nil
let result: String = nick ?? full ?? "Anonymous"
print(result)

短路求值

和 &&、|| 一样,?? 串联也会进行短路求值。一旦找到值,后面的表达式就不会再求值。

func makeDefault() -> Int {
    print("default computed")
    return 0
}
let found: Int? = 9
print(found ?? makeDefault())

右结合性

?? 运算符具有右结合性,因此 a ?? b ?? c 会分组为 a ?? (b ?? c)。这正是处理 fallback 时所需要的行为。

let x: Int? = nil
let y: Int? = nil
let z: Int? = 3
print(x ?? (y ?? (z ?? 0)))

分层配置默认值

对于分层配置,串联写法非常有用:先使用用户设置,再使用应用设置,最后使用硬编码的默认值。

let userTheme: String? = nil
let appTheme: String? = "light"
let theme = userTheme ?? appTheme ?? "system"
print(theme)

与转换结合使用

您可以将可能失败的转换与最终默认值串联起来,从而稳健地解析输入。

let raw: String? = nil
let parsed = raw.flatMap { Int($0) } ?? 0
print(parsed)

串联查找字典

可以串联多个字典查找操作,以使用第一个可用的键。

let prefs = ["color": "blue"]
let pick = prefs["accent"] ?? prefs["color"] ?? "gray"
print(pick)

保持串联简短

两三个 fallback 读起来很自然。如果您发现自己需要串联很多个 fallback,可以考虑将逻辑提取到函数中,以提高可读性。

let one: String? = nil
let two: String? = nil
let three = "C"
print(one ?? two ?? three)

串联结果的类型

只要最后一个操作数是非可选值,串联的最终结果就是非可选值。因此可以立即安全地使用该值。

let v1: Int? = nil
let v2: Int? = 4
let total: Int = (v1 ?? v2 ?? 0) + 1
print(total)

快速检查

测试 fallback 串联。

回顾:串联默认值

串联 ?? 运算符,按顺序尝试多个可选值,并在最后使用默认值作为 fallback。第一个非空值优先,求值会短路,结果是非可选值。

let p: String? = nil
let s: String? = "ok"
print(p ?? s ?? "none")

常见问题解答

「串联默认值」课时是免费的吗?

是的 — 「串联默认值」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Swift Academy 课程的其余内容,请升级到 CoddyKit PRO。 Swift Academy 课程共包含 4 节课。

「串联默认值」这节课中我会学到什么?

整洁地组合多个备用值。 你通过在浏览器中直接运行的动手代码来练习 Swift Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Swift Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Swift Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「串联默认值」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Swift Academy 课中编写并运行代码吗?

能。每节 Swift Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 空合并运算符
  2. 串联默认值
  3. 函数参数中的默认值
  4. 字典默认下标
← 返回 Swift Academy