Swift中的可选变量
optional翻译成中文是”可选择的”, 在Swift里它标识一个变量可能为nil.
作为一个曾经搞过C++/C#/Java的人, 理解了十几遍, 才基本理解这个概念. 只能说, 苹果你太牛逼了.
普通变量
普通变量呢, 必须有初始值.
好有一比, 作为一个富二代, 爹很有钱, 生下来就有车了, 必须得有车!
var 座驾:汽车=汽车("奥迪")
普通变量用起来是这样的:
座驾.发动()
座驾.加速()
座驾.甩尾()
座驾.刹车()
可选变量
大部分人投胎技术不行, 不是生下来就有车, 但是万一咱将来有车了呢? 所以刚开始没车的咋办呢? 苹果帮你想到了, 你可以声明一个可选变量, 初始如果你不设置的话, 初始值默认为空.
var 座驾:汽车?
然后你买了车
座驾=汽车("迈拓"")
以后使用这个变量的时候, 就得这样使用:
座驾!.发动()
座驾!.加速()
座驾!.甩尾()
座驾!.刹车()
我擦, 我的车为啥和人家的不一样! 后面都有一个"!" 每次都用"!"来取实际值, 是不是看上去很傻.
别担心, 苹果帮你想到了. 怎么能一眼被人看出屌丝的本质呢?
所以可以这样声明一个可选变量:
var 座驾:汽车!
然后买了车:
座驾=汽车("迈拓"")
以后使用这个变量的时候, 就可以这样使用了:
座驾.发动()
座驾.加速()
座驾.甩尾()
座驾.刹车()
是不是和富二代家的车看起来一样了! 但是, 你的车还是奥拓...
而且, 如果你不设置值, 会报nil异常的
可选变量的好处
可选变量的唯一好处是可以处理nil的状态. 苹果应该是趋向于让你使用普通变量的.
可选链
class 天窗{
var 宽度=20公分
}
class 汽车{
天窗:天窗?
}
var 座驾:汽车?
let 天窗宽度=座驾?.天窗?.宽度
天窗宽度也许是nil,
也许是20公分, 如果是20公分, 那就是货真价实的20公分, 不是可选值哦
判断语句的语法糖
使用下面的方式, 可以免去nil判断.
if let 我的座驾=座驾{
座驾.启动()
}
看到没, 不用!了, "我的座驾" 是正常变量, 不是可选变量.
显示转换
var 座驾:汽车?
座驾=汽车("奥拓)
座驾?.甩尾()
let 真座驾无双=座驾!
真座驾无双.甩尾()
转换之后, 变成正常变量, 不是可选变量.