Swift可选类型(命名型类型)
可选类型
Swift定义后缀?
来作为标准库中的定义的命名型类型Optional<T>
的简写。换句话说,下面两个声明是等价的:
var optionalInteger: Int?
var optionalInteger: Optional<Int>
在上述两种情况下,变量optionalInteger
都被声明为可选整型类型。注意在类型和?
之间没有空格。
类型Optional<T>
是一个枚举,有两种形式,None
和Some(T)
,又来代表可能出现或可能不出现的值。任意类型都可以被显式的声明(或隐式的转换)为可选类型。当声明一个可选类型时,确保使用括号给?
提供合适的作用范围。比如说,声明一个整型的可选数组,应写作(Int[])?
,写成Int[]?
的话则会出错。
如果你在声明或定义可选变量或特性的时候没有提供初始值,它的值则会自动赋成缺省值nil
。
可选符合LogicValue
协议,因此可以出现在布尔值环境下。此时,如果一个可选类型T?
实例包含有类型为T
的值(也就是说值为Optional.Some(T)
),那么此可选类型就为true
,否则为false
。
如果一个可选类型的实例包含一个值,那么你就可以使用后缀操作符!
来获取该值,正如下面描述的:
optionalInteger = 42
optionalInteger! // 42
使用!
操作符获取值为nil
的可选项会导致运行错误(runtime error)。
你也可以使用可选链和可选绑定来选择性的执行可选表达式上的操作。如果值为nil
,不会执行任何操作因此也就没有运行错误产生。
更多细节以及更多如何使用可选类型的例子,见章节“可选”。
可选类型语法
可选类型 → 类型 ?