Swift基礎(chǔ)語法-可選鏈


1. 可選連的概念

  • 可選鏈:有多個(gè)可選類型組成的一個(gè)鏈條被稱之為可選鏈
  • 它的可選性體現(xiàn)于請求或調(diào)用的目標(biāo)當(dāng)前可能為空(nil)
    • 如果可選的目標(biāo)有值遵倦,那么調(diào)用就會(huì)成功拓型;
    • 如果選擇的目標(biāo)為空(nil)额嘿,則這種調(diào)用將返回空(nil)
  • 多次調(diào)用被鏈接在一起形成一個(gè)鏈,如果任何一個(gè)節(jié)點(diǎn)為空(nil)將導(dǎo)致整個(gè)鏈?zhǔn)А?/li>
  • 在可選類型后面放一個(gè)問號吨述,可以定義一個(gè)可選鏈岩睁。
  • 這一點(diǎn)很像在可選值后面放一個(gè)嘆號!來強(qiáng)制拆得其封包內(nèi)的值
    • 它們的主要的區(qū)別在于當(dāng)可選值為空時(shí)可選鏈即刻失敗
    • 然而一般的強(qiáng)制解析將會(huì)引發(fā)運(yùn)行時(shí)錯(cuò)誤。
  • 因?yàn)榭蛇x鏈的結(jié)果可能為nil,可能有值.因此它的返回值是一個(gè)可選類型.
    • 可以通過判斷返回是否有值來判斷是否調(diào)用成功
    • 有值,說明調(diào)用成功
    • 為nil,說明調(diào)用失敗

2. 可選鏈的使用

  • 示例描述: 人(Person)有一個(gè)狗(Dog),狗(Dog)有一個(gè)玩具(Toy),玩具有價(jià)格(price)
  • 使用代碼描述上述信息
// 1.定義了三個(gè)類
class Person {
    var name : String = ""
    var dog : Dog?
}

class Dog {
    var dogName : String = ""
    var toy : Toy?
}

class Toy {
    var price : Double = 0.0
    func flying() {
        print("飛盤正在flying")
    }
}

// 2.創(chuàng)建三個(gè)對象
let p = Person()
p.name = "cdh"

let dog = Dog()
dog.dogName = "旺財(cái)"

let toy = Toy()
toy.price = 100

// 3.讓對象之間產(chǎn)生關(guān)系(cdh擁有一個(gè)叫旺財(cái)?shù)墓?這個(gè)狗有一個(gè)100塊錢的玩具)
p.dog = dog
dog.toy = toy
2.1 從可選鏈中取值
  • 需求:獲取(cdh的旺財(cái)狗的玩具的價(jià)格)
    • 取出的值為可選類型,因?yàn)榭蛇x鏈中有一個(gè)可選類型為nil,則返回nil
    • 因此結(jié)果可能有值,可能為nil.因此是一個(gè)可選類型
// 4.獲取(cdh的旺財(cái)狗的玩具的價(jià)格)
// 以下寫法非常復(fù)雜, 需要多次 if 判斷, 因此推出可選鏈
if let cdhDog = p.dog {
    if let toy = cdhDog.toy {
        let price = toy.price
    }
}
// let price = p.dog!.toy!.price  // ?強(qiáng)制解包非常危險(xiǎn)
// 可選鏈:有多個(gè)可選類型組成的一個(gè)鏈條被稱之為可選鏈
// 在可選鏈中取值的過程中,編譯器會(huì)自動(dòng)判斷每一個(gè)可選類型是否有值,
// 如果可選類型有值,那么系統(tǒng)會(huì)對該可選類型進(jìn)行解包. 
// 如果發(fā)現(xiàn)可選類型沒有值,那么系統(tǒng)會(huì)自動(dòng)返回nil
let price = person.dog?.toy?.price
print(price) // Optional(100.0)\n
2.2 給可選鏈賦值
  • 1.判斷所有的可選類型是否有值,如果都沒有值,則該語句相當(dāng)于沒有執(zhí)行
  • 2.如果所有的可選類型都有值,則系統(tǒng)會(huì)自動(dòng)給可選類型進(jìn)行解包,解包之后,在進(jìn)行賦值
  • 需求:給大黃一個(gè)新的玩具
//5.給可選鏈賦值
// 一般寫法
if let cdhDog = p.dog {
    if let toy = cdhDog.toy {
        toy.price = 50
    }
}
//強(qiáng)制解包的寫法
// p.dog!.toy!.price = 50 
// 可選鏈賦值
p.dog?.toy?.price = 50
2.3 調(diào)用可選鏈中的方法
  • 如果可選類型有值,則會(huì)執(zhí)行該方法
  • 如果可選類型為nil,則該方法不會(huì)執(zhí)行
// 一般寫法
if let cdhDog = p.dog {
    if let toy = cdhDog.toy {
        toy.flying()
    }
}
// 強(qiáng)制解包寫法
// p.dog!.toy!.flying()
// 可選鏈寫法
p.dog?.toy?.flying()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揣云,一起剝皮案震驚了整個(gè)濱河市捕儒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖刘莹,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阎毅,死亡現(xiàn)場離奇詭異,居然都是意外死亡点弯,警方通過查閱死者的電腦和手機(jī)扇调,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抢肛,“玉大人狼钮,你說我怎么就攤上這事〖裥酰” “怎么了熬芜?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長福稳。 經(jīng)常有香客問我涎拉,道長,這世上最難降的妖魔是什么的圆? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任鼓拧,我火速辦了婚禮,結(jié)果婚禮上越妈,老公的妹妹穿的比我還像新娘季俩。我一直安慰自己,他們只是感情好叮称,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布种玛。 她就那樣靜靜地躺著,像睡著了一般瓤檐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娱节,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天挠蛉,我揣著相機(jī)與錄音,去河邊找鬼肄满。 笑死谴古,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稠歉。 我是一名探鬼主播掰担,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怒炸!你這毒婦竟也來了带饱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勺疼,沒想到半個(gè)月后教寂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡执庐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年酪耕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轨淌。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迂烁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出递鹉,到底是詐尸還是另有隱情婚被,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布梳虽,位于F島的核電站址芯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏窜觉。R本人自食惡果不足惜谷炸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望禀挫。 院中可真熱鬧旬陡,春花似錦、人聲如沸语婴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砰左。三九已至匿醒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缠导,已是汗流浹背廉羔。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留僻造,地道東北人憋他。 一個(gè)月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像髓削,于是被迫代替她去往敵國和親竹挡。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

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