一個可選類型的常量或變量說明它可以有一個指定值,也可以是nil。可選類型可用于聲明所有的數(shù)據(jù)類型,包括基礎(chǔ)數(shù)據(jù)類型、類、結(jié)構(gòu)體等。
可選類型的聲明
1.可選常量
let a:Int?
2.可選變量
var y:Int? = 10
如果不給可選變量賦值,則它的默認值為nil。在開發(fā)中,還可以給可選項(包括可選常量和可選變量)賦值為nil,表示它沒有值。要注意的是,只有可選項可以賦值為nil,非可選的常量和變量不能賦值為nil。如果想要你的數(shù)據(jù)能賦值為nil,則必須給它聲明為可選類型。
注意:
Swift的nil和Objective-C的nil不一樣。在OC中,nil表示一個空指針,只能用于對象。在Swift中,沒有指針的概念,nil的含義是一個值,表示值得缺失。Swift中的nil可用于任何類型的可選項,不僅限于對象。
標準庫中定義的可選類型是命名型類型Optional<T>,使用后綴?是它的簡寫形式。也就是說,下面兩個聲明是等價的。
var x:Int?
var x:Optional<Int>
解包(Unwrapping)
可選項不能直接參與計算,要使用可選項的值,必須對它進行解包。解包方法是在可選項后加嘆號( ?。硎救〉每蛇x項的值,如果沒有值,則編譯器會報錯。
所以在強制解包時,一定要確??蛇x項例有非nil得值,方法是使用if語句提前對它進行判斷。
隱式解析可選類型
隱式解析可選類型的聲明方法是將數(shù)據(jù)類型后的問號( ?)改成嘆號( !)
let x:Int! = 5
var y:Int! = 10
隱式解析可選類型本質(zhì)上是一個可選類型,但是可以被當(dāng)作非可選類型來取值,可以把它當(dāng)作一個自動解析的可選類型,而不需要每次使用的時候顯示解析。
空合并運算符( ??)
空合并運算法的語法結(jié)構(gòu)為:
a??b
當(dāng)可選類型a不為空時,對a進行強制解包,取出a的值。反之,當(dāng)a為空時,返回默認值b。其中b可以是字面值、常量/變量或者表達式。
空合并運算符有兩個條件:
- 表達式a必須是可選類型(Optional);
- 默認值b的數(shù)據(jù)類型必須與a的值數(shù)據(jù)類型一致。