Swift基礎(chǔ)語法簡介(三)——可選項

? 可以利用可選項來處理值可能缺失的情況」⒚迹可選項意味著:這里有一個值,它等于X或者這里根本沒有值须眷。

? 在C和Objective-C中竖瘾,沒有可選項的概念。在Objective-C中有一個近似的特性花颗,一個方法可以返回一個對象或者返回nil捕传。nil的意思是“缺少一個可用對象”。然而扩劝,他只能用在對象上庸论,卻不能作用在結(jié)構(gòu)體,基礎(chǔ)的C類型和枚舉值上棒呛。對于這些類型聂示,Objective-C會返回一個特殊的值(例如NSNotFound)來表示值的缺失。這種方法是建立在假設(shè)調(diào)用者知道這個特殊的值并記得去檢查他簇秒。然而鱼喉,Swift中的可選項就可以讓你知道任何類型的值的缺失,他并不需要一個特殊的值趋观。

? 你可以通過給可選變量賦值一個nil來將之設(shè)置為沒有值:

var serverResponseCode: Int? = 404

// serverResponseCode contains an actualInt value of 404

serverResponseCode = nil

// serverResponseCode now contains no value

? nil不能用于非可選的常量或者變量扛禽,如果你的代碼中常量或變量需要作用于特定條件下的值缺失,可以給它聲明為相應(yīng)類型的可選項皱坛。

如果你定義的可選變量沒有提供一個默認(rèn)值编曼,變量會被自動設(shè)置成nil。

var surveyAnswer: String?

// surveyAnswer is automatically set to nil

?Swift中的nil和Objective-C中的nil不同剩辟,在Objective-C中nil是一個指向不存在對象的指針掐场。在Swift中,nil不是指針?biāo)侵等笔У囊环N特殊類型贩猎,任何類型的可選項都可以設(shè)置成nil而不僅僅是對象指針熊户。

1、強制展開

if helloMessage != nil {

print("convertedNumberhas an integer value of \( helloMessage!).")

}

一旦確定可選變值中包含值融欧,你可以在可選的名字后面加一個感嘆號(!)來獲取值敏弃,感嘆號的意思就是說“我知道這個可選項里面有值卦羡,展開吧”噪馏。這就是所謂的可選值的強制展開。使用!?來獲取一個不存在的可選值會導(dǎo)致運行錯誤绿饵,在使用!強制展開之前必須確鼻飞觯可選項中包含一個非nil?的值。

2拟赊、可選項綁定

? 可以使用可選項綁定來判斷可選項是否包含值刺桃,如果包含就把值付給一個臨時的常量或者變量∥睿可選綁定可以與if和while的語句使用來檢查可選項內(nèi)部的值瑟慈,并賦值給一個常量或者變量桃移。

if let?constantName = someOptional{

print("constantName is\(constantName)")?? // constantName只能在if語句內(nèi)用

}

? 你可以在同一個if語句中包含多可選項綁定,用逗號分割即可葛碧。如果任一可選綁定結(jié)果是nil或者布爾值為false借杰,那么整個if判斷會被看做false。

if let firstNumber = Int("4"), letsecondNumber = Int("42"), firstNumber < secondNumber && secondNumber< 100 {

print("\(firstNumber)< \(secondNumber) < 100")

}

3进泼、隱式展開可選項

? 通過在聲明的類型后邊添加一個嘆號(String!)而非問號(String?)來書寫隱式展開可選項蔗衡。

let possibleString: String? = "Anoptional string."

let forcedString: String = possibleString! //requires an exclamation mark

let assumedString: String! = "Animplicitly unwrapped optional string."

let implicitString: String = assumedString //no need for an exclamation mark

? 隱式展開可選項其實就是在每次訪問該值的時候賦予了自動展開的權(quán)限(即自動執(zhí)行了感嘆號的功能(!))。你可以在聲明可選項的時候添加一個嘆號而不是每次調(diào)用的時候再可選項后添加嘆號乳绕。當(dāng)然绞惦,前提是該可選值有值。隱式展開可選項主要被用在Swift類的初始化過程中(初始化的時候被賦值洋措,之后會一直保持有值的狀態(tài))济蝉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市呻纹,隨后出現(xiàn)的幾起案子堆生,更是在濱河造成了極大的恐慌,老刑警劉巖雷酪,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淑仆,死亡現(xiàn)場離奇詭異,居然都是意外死亡哥力,警方通過查閱死者的電腦和手機蔗怠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吩跋,“玉大人寞射,你說我怎么就攤上這事⌒颗ィ” “怎么了桥温?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梁丘。 經(jīng)常有香客問我侵浸,道長,這世上最難降的妖魔是什么氛谜? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任掏觉,我火速辦了婚禮,結(jié)果婚禮上值漫,老公的妹妹穿的比我還像新娘澳腹。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布酱塔。 她就那樣靜靜地躺著沥邻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羊娃。 梳的紋絲不亂的頭發(fā)上谋国,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音迁沫,去河邊找鬼芦瘾。 笑死,一個胖子當(dāng)著我的面吹牛集畅,可吹牛的內(nèi)容都是我干的近弟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼挺智,長吁一口氣:“原來是場噩夢啊……” “哼祷愉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赦颇,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤二鳄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后媒怯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體订讼,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年扇苞,在試婚紗的時候發(fā)現(xiàn)自己被綠了欺殿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡鳖敷,死狀恐怖脖苏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情定踱,我是刑警寧澤棍潘,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站崖媚,受9級特大地震影響亦歉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜至扰,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一鳍徽、第九天 我趴在偏房一處隱蔽的房頂上張望资锰。 院中可真熱鬧敢课,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至圾结,卻和暖如春瑰剃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背筝野。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工晌姚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歇竟。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓挥唠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親焕议。 傳聞我的和親對象是個殘疾皇子宝磨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔惑芭,今天18年5月份再次想寫文章概说,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,737評論 2 9
  • 關(guān)于 Swift 重要這個文檔所包含的準(zhǔn)備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的。這個信息可能會改變, 根據(jù)這個文...
    無灃閱讀 4,283評論 1 27
  • 126.析構(gòu)器 在一個類實例銷毀前,一個析構(gòu)器會立即調(diào)用椅贱。使用deinit 關(guān)鍵字來表示析構(gòu)器, 跟構(gòu)造器寫法類似...
    無灃閱讀 784評論 0 4
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 3,783評論 1 10
  • 《華嚴(yán)經(jīng)》中有一句話别瞭,叫:“不忘初心窿祥,方得始終◎” 初心,就是當(dāng)初的心意,指事情一開始所抱持的信念. 方:才,才能...
    孤獨的馬木閱讀 365評論 1 3