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")
}
Back to Blog

相关文章

阅读更多 »

Swift #7: 元组

元组 元组包含一个或多个相同或不同类型的值的集合。它用于存储临时或短暂的值,尽管它们是…

构建可复用的 SwiftUI 组件库

SwiftUI 让构建 UI 变得轻而易举——但构建在整个应用中外观一致的可复用组件却是另一项挑战。随着应用的增长,UI 复制……