Swift面试题更新 2026-08-05

在 Swift 编程语言中,双问号运算符 ?? 的定义是什么?请解释其工作原理并给出具体使用场景。

技术原理Swift

考察说明

考查对 Swift 可选类型解包运算符的基本理解与实际用法。

回答思路

  1. 【回答框架 1】空合并运算符 ?? 是一个二元运算符,用于可选类型 Optional,若左侧可选值有值则直接返回该值,否则返回右侧的默认值。它本质上是三目运算符的简写,即 a ?? b 等价于 a != nil ? a! : b,但 ?? 更安全和简洁。
  2. 【回答框架 2】使用场景包括:为可选变量提供默认值,例如 let name = inputName ?? '默认用户';在字典取值时提供回退值,如 let value = dict['key'] ?? 'fallback';在函数返回值可能为 nil 时设置兜底值。
  3. 【回答框架 3】注意 ?? 右侧的表达式只有在左侧为 nil 时才会被求值,属于短路求值。这可以避免不必要的计算开销,也适合作为默认值的复杂表达式。
  4. 【回答框架 4】结合可选链使用时,如 obj?.property ?? defaultValue,当对象为 nil 时整个可选链返回 nil,进而 ?? 提供默认值,实现安全的链式访问与默认值组合。
  5. 【回答框架 5】在实际项目中,?? 常用于 UI 默认文案、网络返回字段的容错、配置项的默认值等,减少显式 if-let 或 guard-let 的样板代码,提升可读性。
  6. 【关键点 1】?? 运算返回左侧可选值或右侧默认值,类型必须一致。
  7. 【关键点 2】具备短路求值特性,右侧仅在左侧为 nil 时执行。
  8. 【关键点 3】常用于可选值默认值、字典取值回退及与可选链结合使用。
  9. 【关键点 4】等价于三目运算符 a != nil ? a! : b,但更简洁安全。
  10. 【易错点 1】若右侧默认值也需要复杂计算,需注意短路求值仍可能带来性能问题,可先缓存计算值。
  11. 【易错点 2】当左侧可选值非 nil 但类型不匹配时,会发生编译错误,需保证两侧类型一致。
  12. 【易错点 3】滥用 ?? 可能掩盖逻辑错误,例如将 nil 视为合法值而忽略其业务含义,建议仅在明确预期默认值时使用。