Swift中的可選類型

1凝化、可選類型概念

可選類型用來處理值可能缺失的情況介杆。

下面的例子嘗試將一個String轉(zhuǎn)換成Int:

let possibleNumber = "123
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推測為類型"Int?"

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

var serverResponseCode: Int? = 404
serverResponseCode = nil

注意:
nil不能用于非可選的常量和變量。如果代碼中有常量或者變量需要處理值缺失的情況,應(yīng)該聲明稱對應(yīng)的可選類型。

如果聲明一個可選常量或者變量但是沒有賦值柬批,它們會自動被設(shè)置為nil:

var surveyAnswer: String?
// surveyAnswer 被自動設(shè)置為nil

可選類型可以用 ?? 設(shè)置默認(rèn)值:

var s: String?
var s1 = s ?? "xx"
print(s1) // print "xx"

注意:
Swift中的nil和Objective-C中的nil不一樣。在OC中,nil是一個指向不存在對象的指針氮帐。在Swift中锻霎,nil不是指針——它是一個確定的值,用來表示值缺失揪漩。任何類型的可選狀態(tài)都可以被設(shè)置為nil,不只是對象類型吏口。

2奄容、強(qiáng)制解析

當(dāng)你確定可選類型確實(shí)包含值之后,可以在可選的名字后面加一個感嘆號(!)來強(qiáng)制解析獲取值产徊。

if  convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber).")
}

3昂勒、可選綁定

if let actualNumber = Int(possibleNumber) {
    print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
    print("\'\(possibleNumber)\' could not be converted to an integer")
}
// 輸出 "'123' has an integer value of 123"

如果Int(possibleNumber)返回的可選Int包含一個值,創(chuàng)建一個叫做actualNumber的新常量并將可選包含的值賦給它舟铜。

4戈盈、隱式解析可選類型

有時(shí)候一個可選類型第一次被賦值后,可以確定它總會有值谆刨。在這種情況下塘娶,每次都要判斷和解析可選值是非常低效的。

這種類型的可選狀態(tài)被定義為隱式解析可選類型痊夭。把想要用作可選類型的后面的問號(String?)改成感嘆號(String!)來聲明一個隱式解析可選類型刁岸。

隱式解析可選類型主要被用在Swift中類的構(gòu)造過程中,請自行查閱相關(guān)資料她我。

下面的例子展示了可選類型和隱式解析可選類型之間的卻別:

let possibleString: String? = "An optional string."
let forcedString: String = possibleString!
// 需要感嘆號來獲取值

let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString
// 不需要感嘆號

注意:
如果一個變量之后可能變成nil的話不要使用隱式解析可選類型虹曙。如果需要在變量的聲明周期中判斷是否是nil的話,使用普通可選類型番舆。

5. 可選類型的鏈?zhǔn)饺≈?/h2>

傳統(tǒng)寫法:

var display: UILabel?
if let temp1 = display {
    if let temp2 = temp1.text {
        let x = temp2.hashValue
        ...
    }
}

鏈?zhǔn)綄懛ǎ?/p>

if let x = display?.text?.hashValue {...} // x is an Int
   let x = display?.text?.hashValue {...} // x is an Int

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酝碳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恨狈,更是在濱河造成了極大的恐慌疏哗,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拴事,死亡現(xiàn)場離奇詭異沃斤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刃宵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門衡瓶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牲证,你說我怎么就攤上這事哮针。” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵十厢,是天一觀的道長等太。 經(jīng)常有香客問我,道長蛮放,這世上最難降的妖魔是什么缩抡? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮包颁,結(jié)果婚禮上瞻想,老公的妹妹穿的比我還像新娘。我一直安慰自己娩嚼,他們只是感情好蘑险,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岳悟,像睡著了一般佃迄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贵少,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天呵俏,我揣著相機(jī)與錄音,去河邊找鬼春瞬。 笑死柴信,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宽气。 我是一名探鬼主播随常,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼萄涯!你這毒婦竟也來了绪氛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤涝影,失蹤者是張志新(化名)和其女友劉穎枣察,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體燃逻,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡序目,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了伯襟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猿涨。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姆怪,靈堂內(nèi)的尸體忽然破棺而出叛赚,到底是詐尸還是另有隱情澡绩,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布俺附,位于F島的核電站肥卡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏事镣。R本人自食惡果不足惜步鉴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望璃哟。 院中可真熱鬧唠叛,春花似錦、人聲如沸沮稚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蕴掏。三九已至,卻和暖如春调鲸,著一層夾襖步出監(jiān)牢的瞬間盛杰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工藐石, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留即供,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塑猖。 傳聞我的和親對象是個殘疾皇子缅刽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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