在 Swift 中,??
是 空合并运算符(Nil-Coalescing Operator) 。它的作用是对一个可选类型(Optional
)的值进行解包,如果可选值为 nil
,则提供一个默认值。
基本语法
swift
let result = optionalValue ?? defaultValue
- 如果
optionalValue
不是nil
,则返回解包后的值。 - 如果
optionalValue
是nil
,则返回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
。
特点
- 短路求值 :如果可选值非
nil
,则不会计算defaultValue
。 - 类型匹配 :
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
检查逻辑。