31.7. 可选类型

Swift 定义后缀 ? 来作为标准库中定义的命名型类型 Optional 的语法糖。换句话说,下面两个声明是等价的:

var optionalInteger: Int?
var optionalInteger: Optional<Int>

在上述两种情况下,变量 optionalInteger 都被声明为可选整型类型。注意在类型和 ? 之间没有空格。

类型 Optional 是一个枚举,有两个成员,nonesome(Wrapped),用来表示可能有也可能没有的值。任意类型都可以被显式地声明(或隐式地转换)为可选类型。如果你在声明可选变量或属性的时候没有提供初始值,它的值则会自动赋为默认值 nil

如果一个可选类型的实例包含一个值,那么你就可以使用后缀运算符 ! 来获取该值,正如下面描述的:

optionalInteger = 42
optionalInteger! // 42

使用 ! 运算符解包值为 nil 的可选值会导致运行错误。

你也可以使用可选链式调用和可选绑定来选择性在可选表达式上执行操作。如果值为 nil,不会执行任何操作,因此也就没有运行错误产生。

更多细节以及更多如何使用可选类型的例子,请参阅 2.13. 可选类型

可选类型语法

optional-type

可选类型 → 类型 ?