此文摘自網(wǎng)絡(luò)
可選鏈
可選連的概念
- 它的可選性體現(xiàn)于請(qǐng)求或調(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è)問(wèn)號(hào)甥材,可以定義一個(gè)可選鏈绑改。
- 這一點(diǎn)很像在可選值后面放一個(gè)嘆號(hào)來(lái)強(qiáng)制拆得其封包內(nèi)的值
- 它們的主要的區(qū)別在于當(dāng)可選值為空時(shí)可選鏈即刻失敗
- 然而一般的強(qiáng)制解析將會(huì)引發(fā)運(yùn)行時(shí)錯(cuò)誤谢床。
- 因?yàn)榭蛇x鏈的結(jié)果可能為nil,可能有值.因此它的返回值是一個(gè)可選類型.
- 可以通過(guò)判斷返回是否有值來(lái)判斷是否調(diào)用成功
- 有值,說(shuō)明調(diào)用成功
- 為nil,說(shuō)明調(diào)用失敗
可選鏈的示例
- 從可選鏈中取值
- 示例描述: 人(Person)有一個(gè)狗(Dog),狗(Dog)有一個(gè)玩具(Toy),玩具有價(jià)格(price)
- 使用代碼描述上述信息
// 1.定義類
class Person {
var name : String
var dog : Dog?
init(name : String) {
self.name = name
}
}
class Dog {
var color : UIColor
var toy : Toy?
init(color : UIColor) {
self.color = color
}
func runing() {
print("跑起來(lái)")
}
}
class Toy {
var price : Double = 0.0
}
// 2.創(chuàng)建對(duì)象,并且設(shè)置對(duì)象之間的關(guān)系
// 2.1.創(chuàng)建對(duì)象
let person = Person(name: "小明")
let dog = Dog(color: UIColor.yellow)
let toy = Toy()
toy.price = 100.0
// 2.2.設(shè)置對(duì)象之間的關(guān)系
person.dog = dog
dog.toy = toy
- 需求:獲取
小明的大黃寵物的玩具價(jià)格
- 取出的值為可選類型,因?yàn)榭蛇x鏈中有一個(gè)可選類型為nil,則返回nil
- 因此結(jié)果可能有值,可能為nil.因此是一個(gè)可選類型
let price = person.dog?.toy?.price
print(price) // Optional(100.0)\n
- 需求:給小明的大黃一個(gè)新的玩具
- 相當(dāng)于給可選類型賦值
person.dog?.toy = Toy()
- 需求:讓小明的狗跑起來(lái)
- 如果可選類型有值,則會(huì)執(zhí)行該方法
- 如果可選類型為nil,則該方法不會(huì)執(zhí)行
person.dog?.runing()