swift-可選型(Optional)

可選型作為swift語言中一大亮點刻获,也是非常重要的一個概念,為此我們要學(xué)好swift厚柳,就要把可選型學(xué)好别垮。



什么是可選型呢碳想?

我們可以看個列子

var errorCode : Int? = 404

從上面的列子可以看到胧奔,跟一般類型不同之處就是在類型后面加個"?",沒錯龙填,像Int?觅够、String?等就是可選型巷嚣。


為什么要學(xué)習(xí)可選型?

在swift中廷粒,nil不代表0坝茎,nil作為一個特殊的類型表示“沒有”。在使用中不像oc能直接賦值給對象nil嗤放,需要通過可選型次酌,跟另一個類型一起使用舆乔。這也是為什么要有可選型的概念希俩。

如果我直接申明一個Int類型的變量颜武,我想賦值一個nil鳞上,那么就會報錯因块。

var errorCode: Int = 404

errorCode = nil ? //是錯誤的

為此,要通過可選型來申明一個Int類型的變量趾断,賦值一個nil就不會報錯

var errorCode: Int? = 404

errorCode = nil //是正確的

注意:

? 一個Int?類型可以被一個Int變量賦值芋酌,但一個Int變量不可以被一個Int?類型賦值

let imInt = 405

errorCode = imInt //是正確的

imInt = errorCode //是錯誤的


可選型解包

一個可選型類型是不能直接拿來用的脐帝,需要通過解包才能使用。

通過"!"解包

這種方法直接解包炸站,確實很方便旱易,但是有個致命缺點阀坏,不能保證解包對象不能為nil忌堂,當(dāng)對象為nil時士修,那么就會報錯。

var errorCode: String? = "404"

"The errorCode is " + errorCode!

//改成nil

errorCode: String? = nil

"The errorCode is" + errorCode! ? //直接報錯

為了避免nil的情況登淘,我們可以通過來if來處理

方法1

swift為我們提供了更方便的解包方法黔州,允許使用同樣的命名

方法2

同樣流妻,我們也可以進(jìn)行多個解包绅这,只需要用逗號分隔即可证薇。

在解包的時候浑度,也可以通過where關(guān)鍵字來限制解包內(nèi)容


更多可選型使用

可選型也可以再元組中使用


隱式可選型

通過隱式可選型申明的變量不用解包就能直接使用先慷,需要主要的是使用的時候必須保證變量不能為nil

隱式可選型申明方式

var errorMessage: String! = "404"


Optional_Chaining和Nil_Coalesce

Optional_Chaining(鏈表式)

在解包的時候可以做一些額外的操作(比如大寫字母等)

Nil_Coalesce(合并)

給出一個場景:一個字符串可能為nil论熙,我需要將這個字符串不等于nil的時候輸出相應(yīng)的值,等于nil的時候就輸出一個自定的字符串二蓝。

正常做法:

通過三目運算的方法:

通過Coalesce的做法:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踊跟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌商玫,老刑警劉巖箕憾,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拳昌,居然都是意外死亡袭异,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門炬藤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來御铃,“玉大人,你說我怎么就攤上這事沈矿∩险妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長就珠。 經(jīng)常有香客問我,道長冕广,這世上最難降的妖魔是什么沟优? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任侵俗,我火速辦了婚禮啄巧,結(jié)果婚禮上猾封,老公的妹妹穿的比我還像新娘。我一直安慰自己枚钓,他們只是感情好多望,可當(dāng)我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布饭于。 她就那樣靜靜地躺著,像睡著了一般殖熟。 火紅的嫁衣襯著肌膚如雪舰罚。 梳的紋絲不亂的頭發(fā)上膜毁,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天倒淫,我揣著相機與錄音运翼,去河邊找鬼矩欠。 笑死沦补,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赠叼,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼贯被,長吁一口氣:“原來是場噩夢啊……” “哼幌陕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荔烧,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎微饥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖窟坐,靈堂內(nèi)的尸體忽然破棺而出讯沈,到底是詐尸還是另有隱情挤茄,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏项乒。R本人自食惡果不足惜栓辜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧集绰,春花似錦、人聲如沸榆纽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽均芽。三九已至湃鹊,卻和暖如春掸驱,著一層夾襖步出監(jiān)牢的瞬間温赔,已是汗流浹背陶贼。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工聊替, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人春叫。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像颓遏,于是被迫代替她去往敵國和親叁幢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,914評論 2 355

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

  • 前言 Swift是一門新的適用于iOS肿孵,macOS唠粥,watchOS,tvOS開發(fā)的編程語言颁井。盡管如此厅贪,Swift的...
    BoomLee閱讀 1,728評論 0 4
  • 本篇將詳細(xì)總結(jié)介紹Swift可選型的用法;顧名思義雅宾,可選類型表示一個變量可能有值养涮,也可能沒有值(nil),但是它的...
    梧雨北辰閱讀 489評論 2 9
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出眉抬,用來撰寫 OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,218評論 3 25
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile麗語閱讀 3,837評論 0 6
  • 之前學(xué)習(xí) Swift 的時候都是比較破碎贯吓,零零散散,以至于有些地方學(xué)習(xí)的不夠透徹蜀变。所以趁最近有時間悄谐,就開始重新學(xué)習(xí)...
    HenryCheng閱讀 4,338評論 11 26