一.可选类型:
Swift的nil和Objective-C有些不一样,在Objective-C中,只有对象才能为nil,而在Swift里,当基础类型(整形、浮点、布尔等)没有值时,也是nil。没有初始值的值,是不能使用的,这就产生了Optional类型。
1.声明:
可选数据类型是在现有的类型后面加个问号”?”
var str:String?
2.可选类型的赋值
对可选类型变量的赋值可以直接使用其变量名进行赋值,也可以直接赋值为nil。
str="123"
3.可选类型的使用
在使用可选类型变量,需要在变量名的后面加上感叹号”!”,”!”的一丝就是确定已经被赋值或确定已有值。
println(str!.toInt())
4.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类型其实是一个枚举:
二.if let 语法(Optional Binding)
“=”等号右边必须是个Optional类型的变量
var count: Int?
count = 100
if let validCount = count {//如果count有值的话,把count的值赋给validCount,且条件为true;如果count为nil,则执行else
"count is " + String(validCount) //count的值为100
} else {
"nil"
}
通过在条件判断语句中(如if、while等)把Optional值直接给一个临时常量,Swift会自动检测Optional是否包含值,如果包含值,会隐式的拆包并给那个临时常量,在接下来的上下文中就能直接使用这个临时常量
三.可选链(Optional Chaining)
Optional Chaining对Swift来说是很基本但又必不可少的东西,相对于简单类型(Int、String等)来说,Optional更主要的应用场景是在复杂对象上,当一个对象包含另一个对象,同时这两个对象都有可能为nil的情况下才是Optional派上用场的地方,在Objective-C里,向nil发消息得到的就是一个nil,但是Swift不能在nil上直接调用方法或属性,同时为了方便我们使用,从而引入了Optional类型