Optional 是 Swift 的一大特色,也是 Swift 初學(xué)者最容易困惑的問題
定義變量時(shí),如果指定是可選的攘宙,表示該變量可以有一個(gè)指定類型的值,也可以是 nil
所以拐迁,這么定義就是錯的蹭劈,如下圖
解決錯誤,如下圖
- 定義變量時(shí)线召,在類型后面添加一個(gè) ?铺韧,表示該變量是可選的
變量可選項(xiàng)的默認(rèn)值是 nil
常量可選項(xiàng)沒有默認(rèn)值,主要用于在構(gòu)造函數(shù)中給常量設(shè)置初始數(shù)值
//例如
let num: Int? = 10
- 如果 Optional 值是 nil缓淹,不允許參與計(jì)算
只有解包(unwrap)后才能參與計(jì)算
在變量后添加一個(gè) !哈打,可以強(qiáng)行解包 - 注意:必須要確保解包后的值不是 nil,否則會報(bào)錯
//: num 可以是一個(gè)整數(shù)讯壶,也可以是 nil料仗,注意如果為 nil,不能參與計(jì)算
let num: Int? = 10
//let r1 = num + 100 //報(bào)錯如下圖
let r1 = num! + 100 // num!為正解
//: 如果 num 為 nil伏蚊,使用 `!` 強(qiáng)行解包會報(bào)錯立轧,如下錯誤演示
let num: Int? //=10 //將 =10去掉,即默認(rèn)nil
let r1 = num! + 100 //報(bào)錯 如下
//unexpectedly found nil while unwrapping an Optional value
//翻譯: 在[解包]一個(gè)可選值時(shí)發(fā)現(xiàn) nil
//: 使用以下判斷躏吊,當(dāng) num 為 nil 時(shí)氛改,if 分支中的代碼不會執(zhí)行
if let n = num {
let r = n + 10
}
?? 運(yùn)算符
?? 運(yùn)算符可以用于判斷 變量/常量 的數(shù)值是否是 nil,如果是則使用后面的值替代
在使用 Swift 開發(fā)時(shí)比伏,?? 能夠簡化代碼的編寫
let num: Int? = nil
let r1 = (num ?? 0) + 10
print(r1)
總結(jié):上面羅列已較為詳盡咯胜卤,其實(shí)大家世紀(jì)用的時(shí)候,注意一下就行凳怨, 而且一般弄錯了還有錯誤提示瑰艘,所以不必太擔(dān)心。我初學(xué)時(shí)還真不習(xí)慣肤舞,到哪都判斷