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