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 #12:函数

函数是由大括号 { 包围并以名称标识的代码块。不同于在循环和条件中使用的代码块……

Swift #11:守卫语句

Guard 语句 guard 包含一个条件,随后是 else 和一个 guard 块。如果条件为 false,则执行 guard 块并…

从算法到冒险

《From Algorithms to Adventures》的封面图片 https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-...

SwiftUI 中的模块化特性架构

🧩 1. 什么是 Feature Module?Feature Module 是一个自包含的单元,代表应用中的一个功能块:Home、Profile、Settings、Feed、Auth 等。