Swift語(yǔ)言很重要的一個(gè)特征就是加入了Optional土思,剛接觸時(shí)Optional的理解就是一個(gè)可能為nil的變量啄刹,定義的時(shí)候語(yǔ)句結(jié)尾加個(gè)袋狞?焚辅,使用的時(shí)候加個(gè)映屋!解包。很多時(shí)候都是xcode自動(dòng)補(bǔ)全的同蜻,隨著使用的增多秧荆,遇到了各種各樣的坑,才對(duì)Optional這個(gè)東西有了深入一點(diǎn)的理解埃仪,也明白了它到底是干什么用的。
看下面一段代碼:
var nothing:String?
func testOptional(str:String?){
if str == nil {
return
}
print(str)
}
testOptional(nothing!)
運(yùn)行結(jié)果"fatal error: unexpectedly found nil while unwrapping an Optional value"
這是因?yàn)樵趕wift語(yǔ)言中陕赃,變量是不能為nil的卵蛉。這是這個(gè)語(yǔ)言最大的特點(diǎn)。定義的時(shí)候如果給一個(gè)變量賦初始值為nil么库,編譯都不會(huì)通過(guò)傻丝。運(yùn)行的時(shí)候如果一個(gè)變量的值為nil,程序就會(huì)"fatal error: unexpectedly found nil while unwrapping an Optional value"诉儒。所以我們?cè)趯懛椒ǖ臅r(shí)候?qū)?shù)的檢測(cè)是能是檢測(cè)Optional的參數(shù)是不是nil葡缰,如果這個(gè)Optional參數(shù)傳入的時(shí)候已經(jīng)解包,那么就沒(méi)有檢測(cè)的機(jī)會(huì)了忱反,運(yùn)行時(shí)只要發(fā)現(xiàn)參數(shù)為nil直接就fatal error了泛释,不會(huì)進(jìn)到函數(shù)內(nèi)部。
所以正確的調(diào)用方式如下:
<code>testOptional(nothing)</code>
因?yàn)樵诜椒╰estOptional內(nèi)部要做參數(shù)檢查温算,所以傳入的參數(shù)必須是Optional的而不是解包后的值怜校。
結(jié)論1. Swift中只有Optional的值可能為nil,如果非Optional的值為nil則會(huì)拋出fatal error注竿。
(待續(xù))