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