Optional的定义
Optional是 OC 中没有的数据类型,是苹果在 Swift 中引入的全新类型,它的特点就是可有值,也可以没有值,当它没有值的时候就是 nil. 并且 Swift 中的nil 和 OC 中 nil 也不一样,在 OC 中只有对象才能为 nil, 而在 Swift 中,当基础类型(整型,浮点,布尔等)没有值的时候,也是 nil, 而不是一个初始值,没有初始值的值是不能使用的,所以就产生了 Optional 类型.定义一个 Optional 的值很容易,只需要在类型后面加上问号(?)就行了,例如:
var str: String?
let status: Int? = 1 // 申明可选Int类型的常量,初始值为1
var defaultAddress: String? = "江苏南京" // 申明可选String类型的变量,初始值为"江苏南京"
var student: Person? // 申明可选Person(自定义的类)的变量,初始值为nil
注意:
Int?和 Int 不相同, Int? 代表可选的 Int 类型,可以赋值为 nil, 而 Int 不可以赋值为 nil
一个 Optional 值和非 Optional 值的区别就在于: Optional 值未经初始化虽然为 nil, 但普通变量未经初始化连 nil 都没有
//未被初始化,但是是一个Optional类型,为nil
var str: String?
str //输出nil
//未被初始化,也不是Optional类型
var str2: String
str2 //使用时出错
Optional 的拆包
显式拆包
Optional 类型的值不能被直接使用,当需要用时要显示拆包,以表明我知道这个 Optional 是一定有值的:
var str: String? = "Hello World!"
str! //Hello World!
对比拆包前后, str 的输出
var str: String? = "Hello World!"
str //{Some "Hello World!"}
str! //Hello World!
之所以要拆包使用,是因为 Optional 类型其实是一个枚举:
enum Optional<T> : Reflectable, NilLiteralConvertible