可選型作為swift語言中一大亮點,也是非常重要的一個概念,為此我們要學好swift,就要把可選型學好。
什么是可選型呢?
我們可以看個列子
var errorCode : Int? = 404
從上面的列子可以看到,跟一般類型不同之處就是在類型后面加個"?",沒錯,像Int?、String?等就是可選型。
為什么要學習可選型?
在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,當對象為nil時,那么就會報錯。
var errorCode: String? = "404"
"The errorCode is " + errorCode!
//改成nil
errorCode: String? = nil
"The errorCode is" + errorCode! ? //直接報錯
為了避免nil的情況,我們可以通過來if來處理
swift為我們提供了更方便的解包方法,允許使用同樣的命名
同樣,我們也可以進行多個解包,只需要用逗號分隔即可。
在解包的時候,也可以通過where關鍵字來限制解包內容
更多可選型使用
可選型也可以再元組中使用
隱式可選型
通過隱式可選型申明的變量不用解包就能直接使用,需要主要的是使用的時候必須保證變量不能為nil
隱式可選型申明方式
var errorMessage: String! = "404"
Optional_Chaining和Nil_Coalesce
Optional_Chaining(鏈表式)
在解包的時候可以做一些額外的操作(比如大寫字母等)
Nil_Coalesce(合并)
給出一個場景:一個字符串可能為nil,我需要將這個字符串不等于nil的時候輸出相應的值,等于nil的時候就輸出一個自定的字符串。
正常做法:
通過三目運算的方法:
通過Coalesce的做法: