在Swift中,可選鏈(Optional Chaining)是一種訪問連接在一起的可選值屬性的方式,而不需要強(qiáng)制解包。如果其中的一個(gè)可選值是nil,那么整個(gè)可選鏈的訪問都會(huì)失敗,并且返回nil。這是一種處理可選值的安全方式,可以防止強(qiáng)制解包的運(yùn)行時(shí)錯(cuò)誤。
- 創(chuàng)建三個(gè)類 Person 、Dog、Toy
//
class Person {
var name : String = ""
// 可選類型 狗
var dog : Dog?
}
class Dog {
var weight : Double = 0
//可選類型 玩具
var toy : Toy?
}
//玩具類
class Toy {
var price : Double = 0.0
func flying() {
NSLog("飛盤在飛---")
}
}
// 2.創(chuàng)建類的對(duì)象 并給對(duì)象屬性賦值
let p = Person()
p.name = "小明"
let d = Dog()
d.weight = 60.0
let t = Toy()
t.price = 20.5
p.dog = d
d.toy = t
- 可選類型使用
// 3. 取出小明的狗的玩具的價(jià)格
//該寫法非常危險(xiǎn):
let dog = p.dog
let toy = dog?.toy
let price = toy?.price
// 該寫法非常麻煩
if let dog = p.dog {
if let toy = dog.toy {
let price = toy.price
}
}
// ?.就是可選鏈:系統(tǒng)會(huì)自動(dòng)判斷該可選類型是否有值,如果有值,則解包,如果沒有值,則賦值為nil
// 注意:可選鏈條獲取的值,一定是一個(gè)可選類型
// 推薦寫法
let price = p.dog?.toy?.price // 輸出 Double/nil
//或者
if let price2 = p.dog?.toy?.price {
print(price2)
}
// 3.2 給小明的狗的玩具賦值一個(gè)新的價(jià)格
// 如果可選鏈中有一個(gè)可選類型是沒有值的,那么這條語句直接不執(zhí)行
p.dog?.toy?.price = 50
// 3.3 可選鏈調(diào)用方法
if let dog = p.dog {
if let toy = dog.toy {
toy.flying()
}
}
p.dog?.toy?.flying()