Swift3之細(xì)致理解Optional(可選類型)

swift是一門類型安全的編程語(yǔ)言微服,聲明的變量默認(rèn)情況下是不能為非空值(nil)的剖踊,如果需要這個(gè)變量可為nil脸秽,那么就需要設(shè)置為可選類型骂删。


可選類型其根源是一個(gè)枚舉型掌动,里面有None和Some兩種類型。其實(shí)所謂的nil就是Optional.None, 非nil就是Optional.Some, 然后會(huì)通過Some(T)包裝(wrap)原始值宁玫,這也是為什么在使用Optional的時(shí)候要拆包(從enum里取出來原始值)的原因.


強(qiáng)制解析

上面說到可選型使用Some(T)包裝(wrap)了原始值

如圖粗恢,即使我們知道str有值,但是直接輸出是可選型而不是String類型欧瘪。

那么要從str中獲得它的字符串值該如何獲得

swift中使用!來進(jìn)行解包眷射,即

獲得的就是str的字符串值

注意:! 強(qiáng)制解析時(shí)必須保證可選類型不為nil,否則強(qiáng)制解析一個(gè)為nil的可選類型會(huì)報(bào)錯(cuò)

fatal error: unexpectedly found nil while unwrapping an Optional value


自動(dòng)解析

在聲明可選型的時(shí)候把?替換為妖碉!即可涌庭。這樣可選變量在使用時(shí)就不需要再加一個(gè)感嘆號(hào)(!)來獲取值,它會(huì)自動(dòng)解析欧宜。

可以看出坐榆,使用!聲明的類型仍然是可選類型,在str為nil時(shí)仍為nil冗茸,在strTest有值時(shí)不需要使用strTest席镀!就可以取到字符串值。

強(qiáng)制解析與自動(dòng)解析中的 ! 區(qū)別

在聲明時(shí)的 ! 只是對(duì)可選類型的一種聲明方式夏漱。誤區(qū):有些人認(rèn)為使用豪诲!聲明的變量就必須為非空,其實(shí)不是這個(gè)意思麻蹋。這里的 跛溉!是說在非空時(shí)str1取值取到的是解包后的值,而不再是Optional()扮授;

在調(diào)用時(shí)的 ! 是強(qiáng)制解包,也就是求取Optional.Some(T)包裝下的值专肪,所以為 Optional值 = nil 時(shí)會(huì)報(bào)錯(cuò)


可選綁定

既然可選型可以為空刹勃,那么通常我們需要判斷非空時(shí)要怎么處理,為nil時(shí)應(yīng)該怎么處理嚎尤。

最常用的判斷方式就是if語(yǔ)句了

這是我們熟悉的if語(yǔ)句寫法荔仁,swift提供了更方便的if let/var語(yǔ)句,也稱為可選綁定

為什么稱if let是一個(gè)語(yǔ)句而不再是 if語(yǔ)句呢芽死,因?yàn)?/p>

if let strTemp = str5 時(shí)進(jìn)行的是解析賦值乏梁。strTemp1 = str5!這時(shí)才和strTemp值相等关贵。

xcode中輸入iflet會(huì)自動(dòng)補(bǔ)全就像是forin語(yǔ)句,但是ifvar不會(huì)不全遇骑,但是不代表ifvar不可以


可選鏈 Optional chaining

為什么會(huì)有可選鏈呢?

如圖揖曾,我們使用可選值變量的時(shí)候各種判斷有時(shí)候還需要if嵌套真的很麻煩落萎,所以出現(xiàn)了可選鏈

通過 ?? ?語(yǔ)法調(diào)用屬性或者方法。即炭剪?出現(xiàn)在調(diào)用時(shí)练链,而不是出現(xiàn)在變量的定義中,稱為可選鏈奴拦。

?返回一個(gè)可選值媒鼓, 可選值為nil則代碼語(yǔ)句執(zhí)行結(jié)果為nil,可選值非空則繼續(xù)往下執(zhí)行。

如:people.money?.canBuyIphone()中如果money為nil绿鸣,則整個(gè)語(yǔ)句返回nil疚沐。如果money有值則執(zhí)行canBuyIphone()方法,判斷是否能購(gòu)買iPhone

也就是說可選鏈?zhǔn)且粋€(gè)可選值枚驻,一個(gè)為nil濒旦,一個(gè)為非nil


空合運(yùn)算符 ??

什么是空合運(yùn)算符呢, 符號(hào)表示就是 ?? ?再登,有點(diǎn)類似三目運(yùn)算符?:的變種

還是上面的例子尔邓,我們把if let語(yǔ)句改成了三目運(yùn)算符,有沒有發(fā)現(xiàn)可選鏈組成的三目運(yùn)算符是相當(dāng)?shù)陌詺怙笔浮6褂??? (空合運(yùn)算符)就簡(jiǎn)短了不少梯嗽。

x ?? y表示判斷x是否為nil,若不為nil沽损,則將x解包后返回灯节,否則,取y的值

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绵估,一起剝皮案震驚了整個(gè)濱河市炎疆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌国裳,老刑警劉巖形入,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缝左,居然都是意外死亡亿遂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門渺杉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛇数,“玉大人,你說我怎么就攤上這事是越《耍” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵英妓,是天一觀的道長(zhǎng)挽放。 經(jīng)常有香客問我,道長(zhǎng)蔓纠,這世上最難降的妖魔是什么辑畦? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮腿倚,結(jié)果婚禮上纯出,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好暂筝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布箩言。 她就那樣靜靜地躺著,像睡著了一般焕襟。 火紅的嫁衣襯著肌膚如雪陨收。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天鸵赖,我揣著相機(jī)與錄音务漩,去河邊找鬼。 笑死它褪,一個(gè)胖子當(dāng)著我的面吹牛饵骨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茫打,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼居触,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了老赤?” 一聲冷哼從身側(cè)響起轮洋,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抬旺,沒想到半個(gè)月后砖瞧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嚷狞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荣堰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片床未。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖振坚,靈堂內(nèi)的尸體忽然破棺而出薇搁,到底是詐尸還是另有隱情,我是刑警寧澤渡八,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布啃洋,位于F島的核電站,受9級(jí)特大地震影響屎鳍,放射性物質(zhì)發(fā)生泄漏宏娄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一逮壁、第九天 我趴在偏房一處隱蔽的房頂上張望孵坚。 院中可真熱鬧,春花似錦、人聲如沸卖宠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扛伍。三九已至筷畦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刺洒,已是汗流浹背鳖宾。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留作媚,地道東北人攘滩。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像纸泡,于是被迫代替她去往敵國(guó)和親漂问。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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