一个可选类型的常量或变量说明它可以有一个指定值,也可以是nil。可选类型可用于声明所有的数据类型,包括基础数据类型、类、结构体等。
可选类型的声明
1.可选常量
let a:Int?
2.可选变量
var y:Int? = 10
如果不给可选变量赋值,则它的默认值为nil。在开发中,还可以给可选项(包括可选常量和可选变量)赋值为nil,表示它没有值。要注意的是,只有可选项可以赋值为nil,非可选的常量和变量不能赋值为nil。如果想要你的数据能赋值为nil,则必须给它声明为可选类型。
注意:
Swift的nil和Objective-C的nil不一样。在OC中,nil表示一个空指针,只能用于对象。在Swift中,没有指针的概念,nil的含义是一个值,表示值得缺失。Swift中的nil可用于任何类型的可选项,不仅限于对象。
标准库中定义的可选类型是命名型类型Optional<T>,使用后缀?是它的简写形式。也就是说,下面两个声明是等价的。
var x:Int?
var x:Optional<Int>
解包(Unwrapping)
可选项不能直接参与计算,要使用可选项的值,必须对它进行解包。解包方法是在可选项后加叹号( !),表示取得可选项的值,如果没有值,则编译器会报错。
所以在强制解包时,一定要确保可选项例有非nil得值,方法是使用if语句提前对它进行判断。
隐式解析可选类型
隐式解析可选类型的声明方法是将数据类型后的问号( ?)改成叹号( !)
let x:Int! = 5
var y:Int! = 10
隐式解析可选类型本质上是一个可选类型,但是可以被当作非可选类型来取值,可以把它当作一个自动解析的可选类型,而不需要每次使用的时候显示解析。
空合并运算符( ??)
空合并运算法的语法结构为:
a??b
当可选类型a不为空时,对a进行强制解包,取出a的值。反之,当a为空时,返回默认值b。其中b可以是字面值、常量/变量或者表达式。
空合并运算符有两个条件:
- 表达式a必须是可选类型(Optional);
- 默认值b的数据类型必须与a的值数据类型一致。
网友评论