可選型作為swift語言中一大亮點刻获,也是非常重要的一個概念,為此我們要學(xué)好swift厚柳,就要把可選型學(xué)好别垮。
什么是可選型呢碳想?
我們可以看個列子
var errorCode : Int? = 404
從上面的列子可以看到胧奔,跟一般類型不同之處就是在類型后面加個"?",沒錯龙填,像Int?觅够、String?等就是可選型巷嚣。
為什么要學(xué)習(xí)可選型?
在swift中廷粒,nil不代表0坝茎,nil作為一個特殊的類型表示“沒有”。在使用中不像oc能直接賦值給對象nil嗤放,需要通過可選型次酌,跟另一個類型一起使用舆乔。這也是為什么要有可選型的概念希俩。
如果我直接申明一個Int類型的變量颜武,我想賦值一個nil鳞上,那么就會報錯因块。
var errorCode: Int = 404
errorCode = nil ? //
是錯誤的
為此,要通過可選型來申明一個Int類型的變量趾断,賦值一個nil就不會報錯
var errorCode: Int? = 404
errorCode = nil //是正確的
注意:
? 一個Int?類型可以被一個Int變量賦值芋酌,但一個Int變量不可以被一個Int?類型賦值
let imInt = 405
errorCode = imInt //是正確的
imInt = errorCode //
是錯誤的
可選型解包
一個可選型類型是不能直接拿來用的脐帝,需要通過解包才能使用。
通過"!"解包
這種方法直接解包炸站,確實很方便旱易,但是有個致命缺點阀坏,不能保證解包對象不能為nil忌堂,當(dāng)對象為nil時士修,那么就會報錯。
var errorCode: String? = "404"
"The errorCode is " + errorCode!
//改成nil
errorCode: String? = nil
"The errorCode is" + errorCode! ? //直接報錯
為了避免nil的情況登淘,我們可以通過來if來處理
swift為我們提供了更方便的解包方法黔州,允許使用同樣的命名
同樣流妻,我們也可以進(jìn)行多個解包绅这,只需要用逗號分隔即可证薇。
在解包的時候浑度,也可以通過where關(guān)鍵字來限制解包內(nèi)容
更多可選型使用
可選型也可以再元組中使用
隱式可選型
通過隱式可選型申明的變量不用解包就能直接使用先慷,需要主要的是使用的時候必須保證變量不能為nil
隱式可選型申明方式
var errorMessage: String! = "404"
Optional_Chaining和Nil_Coalesce
Optional_Chaining(鏈表式)
在解包的時候可以做一些額外的操作(比如大寫字母等)
Nil_Coalesce(合并)
給出一個場景:一個字符串可能為nil论熙,我需要將這個字符串不等于nil的時候輸出相應(yīng)的值,等于nil的時候就輸出一個自定的字符串二蓝。
正常做法:
通過三目運算的方法:
通過Coalesce的做法: