一開始對(duì)可選類型認(rèn)識(shí)不足
這篇文章講的挺透徹
1.使用可選類型(opitionals)來處理值可能確實(shí)的情況席覆,可選類型表示:
有值吠谢,等于x
沒有值
let possibleNumber = “123”
let convertedNumber = possibleNumber.toInt
這個(gè)例子中常量possibleNumber有可能是一個(gè)不單單含有數(shù)字的字符串晦嵌,如果統(tǒng)一轉(zhuǎn)成Int類型有可能會(huì)失敗,所以swift就產(chǎn)生了一個(gè)可選類型荸实,即convertedNumber的類型是Int類的可選(有值就為x匀们,對(duì)于convertedNumber沒有意義的值就為無值(nil),但是convertedNumber的實(shí)際類型還是只是Int類型的准给,不能是Bool泄朴、String等其他類型)。這樣就避免了類型轉(zhuǎn)換時(shí)候出現(xiàn)的錯(cuò)誤露氮。 所以可選類型是用來進(jìn)行確定容錯(cuò)判斷的一個(gè)新東西祖灰。
例子:
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()的返回可選包含一個(gè)值的話(即為一個(gè)Int值)油讯,則創(chuàng)建一個(gè)常量actualNumber并把這個(gè)值賦給它。
如果轉(zhuǎn)化成功延欠,則常量actualNumber就可以在if語句的第一個(gè)分支里使用陌兑,由于它應(yīng)經(jīng)被可選類型的值初始化過,所以不用在用由捎!后綴(可選類型取值要用兔综!取值,直接使用還是optional類型的狞玛,而不是Int類型)獲取它的值软驰。在這個(gè)例子中actualNumber指示被用來輸出轉(zhuǎn)化值的。
(如果自己確信可選值是有值的心肪,后面接個(gè)锭亏!就可以解綁定)
var serverResponseCode: Int? = 404
//serverResponseCode包含一個(gè)可選值404
serverResponseCode = nil
//serverResponseCode現(xiàn)在不包含任何值。
這里有一點(diǎn)可選值404來代表無此操作硬鞍。
需要注意一點(diǎn)的是:nil不能用于非可選類型的變量和常量慧瘤。也就是說nil只能用在可選類型的變量和常量。
如果你聲明了可選變量或常量固该,但是沒有賦值锅减,它們會(huì)被自動(dòng)賦值為nil。
另外需要注意的一點(diǎn)是:swift里的nil和OC里的nil并不一樣伐坏,OC里的nil是一個(gè)指向不存在對(duì)象的指針怔匣;但是在swift中,nil不是指針桦沉,它是一個(gè)確定的值劫狠,用來表示值缺失拴疤。任意類型的可選狀態(tài)的值缺失都可以賦值nil,并不只是對(duì)象類型可以賦值独泞。