空合并运算符

在 Swift 中,??空合并运算符(Nil-Coalescing Operator) 。它的作用是对一个可选类型(Optional)的值进行解包,如果可选值为 nil,则提供一个默认值。

基本语法

swift 复制代码
let result = optionalValue ?? defaultValue
  • 如果 optionalValue 不是 nil,则返回解包后的值。
  • 如果 optionalValuenil,则返回 defaultValue

示例

swift 复制代码
let name: String? = nil
let unwrappedName = name ?? "Unknown"
print(unwrappedName) // 输出: "Unknown"(因为 name 是 nil)
swift 复制代码
let age: Int? = 25
let unwrappedAge = age ?? 0
print(unwrappedAge) // 输出: 25(因为 age 不是 nil)

等价写法

a ?? b 实际上是以下代码的简写:

swift 复制代码
a != nil ? a! : b

即:如果 a 不是 nil,则强制解包(a!),否则返回 b

特点

  1. 短路求值 :如果可选值非 nil,则不会计算 defaultValue
  2. 类型匹配defaultValue 的类型必须和可选值的解包类型一致。

链式使用

可以连续使用 ?? 提供多个备选值:

swift 复制代码
let first: String? = nil
let second: String? = nil
let output = first ?? second ?? "No value"
print(output) // 输出: "No value"

常见用途

  • 安全解包可选值,避免强制解包(!)导致的崩溃。
  • 为缺失的数据提供默认值(如网络请求、用户输入等场景)。

对比其他解包方式

方式 行为
let x = optional! 强制解包(若 nil 会崩溃)
if let x = optional { ... } 条件解包(仅在非 nil 时执行)
guard let x = optional else { ... } 提前返回解包(用于错误处理)
let x = optional ?? defaultValue 提供默认值(最简洁的安全解包)

总结:?? 是 Swift 中处理可选类型的一种简洁、安全的方式,能有效减少代码中的 nil 检查逻辑。

相关推荐
PBitW2 分钟前
git 中容易遗忘的点 (三) 🚀🚀🚀
前端·git·面试
名字还没想好☜3 分钟前
React setState 连续调用「丢更新」排查:批量更新与函数式更新
前端·javascript·react.js·react·usestate
程序员cxuan15 分钟前
离谱,GPT-5.6 竟然在后台执行了 rm -rf
人工智能·后端·程序员
Csvn17 分钟前
📊 SQL 入门 Day 9:CTE(公用表表达式)— 让 SQL 像写代码一样优雅
后端·sql
come1123419 分钟前
Vue 2 与 Vue 3 语法区别及使用技巧
前端·javascript·vue.js
运维行者_20 分钟前
如何查看每个IP的带宽使用情况?NetFlow 技术实战指南
开发语言·网络·分布式·后端·架构·带宽
腻害兔31 分钟前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:ERP 企业资源模块,一个轻量级进销存的完整实现?
前端·javascript·vue.js·人工智能·前端框架·产品经理·ai编程
虹科网络安全42 分钟前
艾体宝新闻|从 SQL 注入到服务器接管:CVE-2026-57517 暴露 Web 管理面板的供应链与安全编码风险
服务器·前端·sql
济*沧*海1 小时前
如何判断接口的返回值?
后端
糖果店的幽灵1 小时前
langgraph的四种state解析
java·前端·javascript·langgraph