Swift定義后綴?來作為標(biāo)準(zhǔn)庫中的定義的命名型類型Optional<T>的簡寫。換句話說,下面兩個聲明是等價的:
var optionalInteger: Int?
var optionalInteger: Optional<Int>
在上述兩種情況下,變量optionalInteger都被聲明為可選整型類型。注意在類型和?之間沒有空格。
類型Optional<T>是一個枚舉,有兩種形式,None和Some(T),又來代表可能出現(xiàn)或可能不出現(xiàn)的值。任意類型都可以被顯式的聲明(或隱式的轉(zhuǎn)換)為可選類型。當(dāng)聲明一個可選類型時,確保使用括號給?提供合適的作用范圍。比如說,聲明一個整型的可選數(shù)組,應(yīng)寫作(Int[])?,寫成Int[]?的話則會出錯。
如果你在聲明或定義可選變量或特性的時候沒有提供初始值,它的值則會自動賦成缺省值nil。
可選符合LogicValue協(xié)議,因此可以出現(xiàn)在布爾值環(huán)境下。此時,如果一個可選類型T?實例包含有類型為T的值(也就是說值為Optional.Some(T)),那么此可選類型就為true,否則為false。
如果一個可選類型的實例包含一個值,那么你就可以使用后綴操作符!來獲取該值,正如下面描述的:
optionalInteger = 42
optionalInteger! // 42
使用!操作符獲取值為nil的可選項會導(dǎo)致運(yùn)行錯誤(runtime error)。
你也可以使用可選鏈和可選綁定來選擇性的執(zhí)行可選表達(dá)式上的操作。如果值為nil,不會執(zhí)行任何操作因此也就沒有運(yùn)行錯誤產(chǎn)生。
更多細(xì)節(jié)以及更多如何使用可選類型的例子,見章節(jié)“可選”。
可選類型語法
可選類型 → 類型 ?