參考資料與鏈接https://www.cnswift.org
可選項(xiàng)
- 這里有一個值,他等于X
- 這里根本沒有值
字符串"123"可以被轉(zhuǎn)換成數(shù)字值123,但是字符串"hello,world"不能
var possibleNumber = "123"
var convertedNumber = Int(possibleNumber)
possibleNumber = "hello, world"
convertedNumber = Int(possibleNumber)
//最終的convertedNumber為nil,類型為Int?
//Int?為可選的Int,它要么是Int,要么什么都沒有
nil
var serverResponseCode : Int? = 404
serverResponseCode = nil
注意
nil不能用于非可選的變量或常量
var survarAnswer : String?
//如果你定義的可選變量沒有提供一個默認(rèn)值,變量會被自動設(shè)置成nil
注意
在 Swift中, nil 不是指針,他是值缺失的一種特殊類型,任何類型的可選項(xiàng)都可以設(shè)置成 nil 而不僅僅是對象類型。
if 語句以及強(qiáng)制展開
可以利用if語句通過比較nil來判斷一個可選中是否包含值,利用 == 或 !=
if convertedNumber != nil {
print("convertedNumber contains some integer value.")
}
//當(dāng)里面確定有值時,可以在可選的名字后面加!,來可選值的強(qiáng)制展開
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).")
}
//如果沒有用!來強(qiáng)制展開可選項(xiàng),打印結(jié)果為Optional(123)
注意
使用!來獲取一個不存在的可選值會導(dǎo)致運(yùn)行錯誤,在使用!強(qiáng)展開之前必須確保可選項(xiàng)中包含一個非nil的值
可選項(xiàng)綁定
可選綁定可以與 if 和 while 的語句使用來檢查可選項(xiàng)內(nèi)部的值,并賦值給一個臨時的變量或常量
if let actualNumber = Int(possibleNumber) {
print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
print("\'\(possibleNumber)\' could not be converted to an integer")
}
//這時就可以不用!后綴來強(qiáng)制展開
if語句中包含多可選項(xiàng)綁定,用逗號分隔,如果任一可選綁定結(jié)果是 nil 或者布爾值為 false ,那么整個 if 判斷會被看作 false 。
if let firstNumber = Int("4") , let secondNumber = Int("10") , firstNumber < secondNumber && secondNumber < 100 {
print("(firstNumber) < (secondNumber) < 100")
}
隱式展開可選項(xiàng)
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // requires an exclamation mark
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // no need for an exclamation mark
//你可以把隱式展開可選項(xiàng)當(dāng)做在每次訪問它的時候被給予了自動進(jìn)行展開的權(quán)限
//你可以在聲明可選項(xiàng)的時候添加一個嘆號而不是每次調(diào)用的時候在可選項(xiàng)后邊添加一個嘆號。
注意
- 如果你在隱式展開可選項(xiàng)沒有值的時候還嘗試獲取值,會導(dǎo)致運(yùn)行錯誤。結(jié)果和在沒有值的普通可選項(xiàng)后面加一個嘆號一樣。
- 不要在一個變量將來會變?yōu)?nil 的情況下使用隱式展開可選項(xiàng)。如果你需要檢查一個變量在生存期內(nèi)是否會變?yōu)?nil ,就使用普通的可選項(xiàng)。