Swift可選類型(nil和OC大不同)

原文地址

一開始對(duì)可選類型認(rèn)識(shí)不足

這篇文章講的挺透徹

1.使用可選類型(opitionals)來處理值可能確實(shí)的情況席覆,可選類型表示:

有值吠谢,等于x

沒有值

比如下面的一個(gè)列子:

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è)新東西祖灰。

2.可選綁定

可選綁定是用來判斷可選類型是否包含值(所以說他是一個(gè)可以作為條件判斷的語句),如果包含就把值賦給一個(gè)臨時(shí)變量或者變量沦辙。可選綁定可以用if或者while語句中來對(duì)可選類型的值進(jìn)行判斷并把值賦給一個(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è)锭亏!就可以解綁定)

3.關(guān)于nil

你可以為可選變量賦值為nil來表示它沒有值:

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ì)象類型可以賦值独泞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呐矾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子懦砂,更是在濱河造成了極大的恐慌蜒犯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荞膘,死亡現(xiàn)場(chǎng)離奇詭異罚随,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)羽资,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門淘菩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屠升,你說我怎么就攤上這事潮改。” “怎么了腹暖?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵汇在,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我脏答,道長(zhǎng)糕殉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任殖告,我火速辦了婚禮阿蝶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘黄绩。我一直安慰自己赡磅,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布宝与。 她就那樣靜靜地躺著焚廊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪习劫。 梳的紋絲不亂的頭發(fā)上咆瘟,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音诽里,去河邊找鬼袒餐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的灸眼。 我是一名探鬼主播卧檐,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼焰宣!你這毒婦竟也來了霉囚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤匕积,失蹤者是張志新(化名)和其女友劉穎盈罐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闪唆,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盅粪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悄蕾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片票顾。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖帆调,靈堂內(nèi)的尸體忽然破棺而出奠骄,到底是詐尸還是另有隱情,我是刑警寧澤贷帮,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布戚揭,位于F島的核電站诱告,受9級(jí)特大地震影響撵枢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜精居,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一锄禽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧靴姿,春花似錦沃但、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至维雇,卻和暖如春淤刃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吱型。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工逸贾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓铝侵,卻偏偏與公主長(zhǎng)得像灼伤,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咪鲜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容