標籤:
當值可能存在預設的情況時,你就可以使用可選項。意思是:有一個值,它可以等於一個x的具體值,也可能沒有值。
注意:在C或者Objective-C中沒有可選值這這個概念。在Objective-C中有一個和可選項相近的函數,這個函數返回一個nil否則返回一個對象,nil意味著一個有效對象的預設值。然而,可選項只能用於對象,不能用於結構,基礎C類型,或者枚舉值。對於這些類型,Objective-C函數通常返回一個特定的值(比如NSNotFound)來說明一個預設的值。我們可以通過逆向測試方法假設函數的調用者知道有函數有一個特殊值並記得校正。Swift可選項可讓你在任何時候指明一個預設的值,並且不需要一個特定的常量。這兒有個例子說明了預設值被用於的範圍。
Swift中的字串(String)類型有一個叫toInt的函數,這個函數可以把一個字串轉(String)化為一個整數(Int)值。然後,並不是所有的字串都可以被轉換為一個整數,例如字串"123"可以轉換為一個整數123,但是,字串"hello","world"就不能轉換為一個明確的數值。
下邊這個例子示範了函數toInt嘗試把一個字串轉換為一個整數:
let possibleNumber="123"
let convertedNumber=possibleNumber.toInt()
// convertedNumber 的類型被自動推斷出為一個整形可選項,Int?
因為toInt函數可能轉換失敗,讓它返回一個Int還不如返加一個可選項Int?。整數型可選項寫作Int?,不是Int。問號標記指明了這個值可能存在可選,這意味著這個值有時可能是一個Int值,有時可能不存在任何值。(它不能包含其它的任何值,比如Bool值或者String字串,它要麼是一個整數,要麼什麼都沒有)。
nil
你可以通過一個特殊值nil來設定一個可選變數的值的狀態:
var serverResponseCode: Int? = 404
// serverResponseCode 包含了一個真實的Int值 404
serverResponseCode = nil
// serverResponseCode現在不包含任何值。
注意:nil不能被用於不是可選型的常量和變數。如果一個常量或變數在一些特定的條件下需要一個預設值,這時就需要把它定義為一個合適類型的可選值。
如果你定義可選型的常量或變數時沒有提供預設值時,這個常量或變數的值會自動的被設定為nil:
var surveyAnswer:String? // suveyAnswer 的值被自動化佈建為nil
注意:Swift中的nil和Objective-C的nil不一樣。在Objective-C中的nil指向一個不存在的對象,在Swift中nil不是指向一個確定類型的預設值。任何類型的可選值都可以被設定為nil,不僅僅是物件類型。
Swift之可選項