let number = "123"
// let number = "hello"
let convertNumerber = Int(number)
if (convertNumerber != nil) {
print("convertNumber is \(convertNumerber!)")
} else {
print("convertNumber is \(convertNumerber)" )
}
如果你確定可選包含一個值,你可以在名稱後面加驚歎號 ! 訪問可選的值。
驚歎號 ! 表示:“ 這個可選有值,請使用它。”
使用!表示把這個可變類型‘降級’爲不可變類型
這就是所謂的 強制解析(forced unwrapping)可選的值
也叫拆包
可空類型的精度(取值範圍)大於不可控類型,所以拆包又叫強制解析
如果用 ! 來獲取一個可選值可能會導致運行時錯誤。所以,
使用 ! 來強制解析值之前,一定要確定可選包含一個非 nil 的值(if判斷一下)
可選綁定(optional binding)用來判斷可選是否包含值,
如果包含就把值賦給一個臨時常量或者變量。
可選綁定一般用在 if 和 while 語句中,
對可選的值進行判斷並把值賦給一個常量或者變量,例子如下
// let number1 = "123"
let number1 = "hello"
if let convertNumerber1 = Int(number1) {
print("convertNumber1 is \(convertNumerber1)")
} else {
print("convertNumber1 is nil ")
}
以上代碼表示:“ 如果 Int(number1) 返回的可選 Int 包含一個值,
創建常量 convertNumerber1,並將可選包含的值賦給它。”
如果轉換成功,convertNumerber1 常量可以在 if 語句的第一個分支中使用。
convertNumerber1已經被初始化,所以不需要再使用 ! 獲取它的值。
在這個例子中,convertNumerber1用來輸出轉換結果。
你可以在可選綁定中使用常量和變量。
通過給可選的變量賦值給nil來表示他們沒有值
var serverResponseCode :Int? = 404
print(serverResponseCode)
serverResponseCode = nil
print(serverResponseCode)
var myBananaCount:Int?
print(myBananaCount)
var myAppleCount = 3
myAppleCount = nil
但是nil不能用於非可選的常量或者變量。
如果代碼中有常量或者變量需要處理值缺失的情況,把他們聲明稱對應的可選類型
如果一個可選的常量或者變量沒有提供默認值,他們會被自動設置爲nil
Swift 的 nil 和 Objective-C 的 nil 並不一樣。
在 Objective-C 中,nil 是一個指向不存在對象的指針
在 Swift 中,nil 不是指針,它是一個確定的值,用來表示值的缺失。
任何類型的可選都可以被設置爲 nil,不只是對象類型。