Swift 可選(Optionals)類型

Swift 可選(Optionals)類型Swift 的可選(Optional)類型相寇,用于處理值缺失的情況慰于。可選表示"那兒有一個值唤衫,并且它等于 x "或者"那兒沒有值"婆赠。Swfit語言定義后綴?作為命名類型Optional的簡寫佳励,換句話說休里,以下兩種聲明是相等的:var optionalInteger: Int?var optionalInteger: Optional在這兩種情況下,變量 optionalInteger 都是可選整數(shù)類型赃承。注意妙黍,在類型和 ?之間沒有空格。

Optional 是一個含有兩種情況的枚舉瞧剖,None 和 Some(T)拭嫁,用來表示可能有或可能沒有值。任何類型都可以明確聲明為(或者隱式轉(zhuǎn)換)可選類型抓于。當(dāng)聲明一個可選類型的時候做粤,要確保用括號給 ? 操作符一個合適的范圍。例如捉撮,聲明可選整數(shù)數(shù)組怕品,應(yīng)該寫成 (Int[])? 寫成 Int[]? 會報(bào)錯。

當(dāng)你聲明一個可選變量或者可選屬性的時候沒有提供初始值呕缭,它的值會默認(rèn)為 nil堵泽。

可選項(xiàng)遵照 LogicValue 協(xié)議修己,因此可以出現(xiàn)在布爾環(huán)境中恢总。在這種情況下,如果可選類型T?包含類型為T的任何值(也就是說它的值是 Optional.Some(T) )睬愤,這個可選類型等于 true片仿,反之為 false。

如果一個可選類型的實(shí)例包含一個值尤辱,你可以用后綴操作符 砂豌!來訪問這個值厢岂,如下所示:

optionalInteger = 42

optionalInteger! // 42

使用操作符!去獲取值為nil的可選變量會有運(yùn)行時錯誤阳距。

你可以用可選鏈接和可選綁定選擇性執(zhí)行可選表達(dá)式上的操作塔粒。如果值為nil,任何操作都不會執(zhí)行筐摘,也不會有運(yùn)行報(bào)錯卒茬。

讓我們來詳細(xì)看下以下實(shí)例來了解 Swift 中可選類型的應(yīng)用:

import Cocoa

var myString:String? = nil

if myString != nil {

print(myString)

}else{

print("字符串為 nil")

}

以上程序執(zhí)行結(jié)果為:

字符串為 nil

可選類型類似于Objective-C中指針的nil值,但是nil只對類(class)有用咖熟,而可選類型對所有的類型都可用圃酵,并且更安全。

強(qiáng)制解析

當(dāng)你確定可選類型確實(shí)包含值之后馍管,你可以在可選的名字后面加一個感嘆號(!)來獲取值郭赐。這個感嘆號表示"我知道這個可選有值,請使用它确沸。"這被稱為可選值的強(qiáng)制解析(forced unwrapping)捌锭。

實(shí)例如下:

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if myString != nil {

print(myString)

}else{

print("myString 值為 nil")

}

以上程序執(zhí)行結(jié)果為:

Optional("Hello, Swift!")

強(qiáng)制解析可選值,使用感嘆號(!):

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if myString != nil {

// 強(qiáng)制解析

print( myString! )

}else{

print("myString 值為 nil")

}

以上程序執(zhí)行結(jié)果為:

Hello, Swift!

注意:

使用!來獲取一個不存在的可選值會導(dǎo)致運(yùn)行時錯誤罗捎。使用!來強(qiáng)制解析值之前舀锨,一定要確定可選包含一個非nil的值。

自動解析

你可以在聲明可選變量時使用感嘆號(!)替換問號(?)宛逗。這樣可選變量在使用時就不需要再加一個感嘆號(!)來獲取值坎匿,它會自動解析。

實(shí)例如下:

import Cocoa

var myString:String!

myString = "Hello, Swift!"

if myString != nil {

print(myString)

}else{

print("myString 值為 nil")

}

以上程序執(zhí)行結(jié)果為:

Hello, Swift!

可選綁定

使用可選綁定(optional binding)來判斷可選類型是否包含值雷激,如果包含就把值賦給一個臨時常量或者變量替蔬。可選綁定可以用在if和while語句中來對可選類型的值進(jìn)行判斷并把值賦給一個常量或者變量屎暇。

像下面這樣在if語句中寫一個可選綁定:

if let constantName = someOptional {

statements

}

讓我們來看下一個簡單的可選綁定實(shí)例:

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if let yourString = myString {

print("你的字符串值為 - \(yourString)")

}else{

print("你的字符串沒有值")

}

以上程序執(zhí)行結(jié)果為:

你的字符串值為 - Hello, Swift!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末承桥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖疆偿,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件查近,死亡現(xiàn)場離奇詭異,居然都是意外死亡阿纤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉恋,“玉大人,你說我怎么就攤上這事∏岷冢” “怎么了糊肤?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長氓鄙。 經(jīng)常有香客問我馆揉,道長,這世上最難降的妖魔是什么抖拦? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任把介,我火速辦了婚禮,結(jié)果婚禮上蟋座,老公的妹妹穿的比我還像新娘拗踢。我一直安慰自己,他們只是感情好向臀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布巢墅。 她就那樣靜靜地躺著,像睡著了一般券膀。 火紅的嫁衣襯著肌膚如雪君纫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天芹彬,我揣著相機(jī)與錄音蓄髓,去河邊找鬼。 笑死舒帮,一個胖子當(dāng)著我的面吹牛会喝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玩郊,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼肢执,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了译红?” 一聲冷哼從身側(cè)響起预茄,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侦厚,沒想到半個月后耻陕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刨沦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年诗宣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片已卷。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡梧田,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出侧蘸,到底是詐尸還是另有隱情裁眯,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布讳癌,位于F島的核電站穿稳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晌坤。R本人自食惡果不足惜逢艘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骤菠。 院中可真熱鬧它改,春花似錦、人聲如沸商乎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹉戚。三九已至鲜戒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抹凳,已是汗流浹背遏餐。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赢底,地道東北人失都。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像幸冻,于是被迫代替她去往敵國和親嗅剖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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