Swift #6:可选
发布: (2025年12月10日 GMT+8 03:29)
3 min read
原文: Dev.to
Source: Dev.to
可选类型
有时需要表示变量没有值的情况。为此,Swift 提供了 ? 修饰符,可以把任何数据类型变成可选类型。可选变量可以有值,也可以为空(其值为 nil)。
var result: Int? // 默认是 nil
result = 1
result = nil
延迟初始化(Implicitly Unwrapped Optionals)
有时一个可选变量在使用时一定会有值,但一开始并不知道该给它什么值。这类可选变量使用 ! 而不是 ? 声明,在表达式中使用时会被视为已解包。
var x: Int!
x = 3
var result = x * 2 // 6
读取
x的值时不需要再次使用!。
可选解包
强制解包(Forced unwrap)
只有在 百分之百确定 可选值不为 nil 时,才能使用 ! 强制解包。
let optionalValue: Int? = 5
let value = optionalValue! // value: Int = 5
可选绑定 (if let/var, guard let/var)
为了安全地检查可选值是否为 nil 并使用它,Swift 提供了 Optional Binding 语法。
var optionalValue: Int? = 5
if let value = optionalValue {
print(value)
}
if var value = optionalValue {
print(value)
}
复用相同的名称
var value: Int? = 5
if let value = value {
print(value)
}
if var value = value {
print(value)
}
从 Swift 5.7 开始,当 Optional Binding 中的常量/变量名与可选变量名相同,语法可以简写为:
var value: Int? = 5
if let value {
print(value)
}
if var value {
print(value)
}
与 guard 配合使用
guard let value else {
return
}
guard var value else {
return
}
额外条件
var value: Int? = 5
if let value, value > 3 {
print(value)
}
注意:即使名称相同,Optional Binding 中的常量/变量与原始的可选变量在内存中是不同的实体。
可选链(Optional chaining)
let optionalName = optionalValue?.name
空合运算符(Nil‑Coalescing,??)
如果可选为 nil,返回默认值。
let value = optionalNumber ?? 0
模式匹配(Pattern Matching,case let)
let optionalValue: Int? = 77
switch optionalValue {
case let value?:
print(value)
case nil:
print("nil")
}