一開始對可選類型認識不足
這篇文章講的挺透徹
1.使用可選類型(opitionals)來處理值可能確實的情況,可選類型表示:
有值,等于x
沒有值
let possibleNumber = “123”
let convertedNumber = possibleNumber.toInt
這個例子中常量possibleNumber有可能是一個不單單含有數字的字符串,如果統一轉成Int類型有可能會失敗,所以swift就產生了一個可選類型,即convertedNumber的類型是Int類的可選(有值就為x,對于convertedNumber沒有意義的值就為無值(nil),但是convertedNumber的實際類型還是只是Int類型的,不能是Bool、String等其他類型)。這樣就避免了類型轉換時候出現的錯誤。 所以可選類型是用來進行確定容錯判斷的一個新東西。
例子:
if let actualNumber = possibleNumber.toInt(){
println("\(possibleNumber)has an integer value of \(actualNumbe)")
}else{
println("\(possibleNumber) could't be converted to an integer.")
}
如果possibleNumber.toInt()的返回可選包含一個值的話(即為一個Int值),則創建一個常量actualNumber并把這個值賦給它。
如果轉化成功,則常量actualNumber就可以在if語句的第一個分支里使用,由于它應經被可選類型的值初始化過,所以不用在用!后綴(可選類型取值要用!取值,直接使用還是optional類型的,而不是Int類型)獲取它的值。在這個例子中actualNumber指示被用來輸出轉化值的。
(如果自己確信可選值是有值的,后面接個!就可以解綁定)
var serverResponseCode: Int? = 404
//serverResponseCode包含一個可選值404
serverResponseCode = nil
//serverResponseCode現在不包含任何值。
這里有一點可選值404來代表無此操作。
需要注意一點的是:nil不能用于非可選類型的變量和常量。也就是說nil只能用在可選類型的變量和常量。
如果你聲明了可選變量或常量,但是沒有賦值,它們會被自動賦值為nil。
另外需要注意的一點是:swift里的nil和OC里的nil并不一樣,OC里的nil是一個指向不存在對象的指針;但是在swift中,nil不是指針,它是一個確定的值,用來表示值缺失。任意類型的可選狀態的值缺失都可以賦值nil,并不只是對象類型可以賦值。