可選鏈
可選鏈
-
它的可選性體現(xiàn)于請求或者調(diào)用的目標當前可能為空 (nil)
- 如果可選的目標有值剔交,那么調(diào)用就會成功本昏;
- 如果選擇的目標為空(nil)纷捞,則這種調(diào)用將返回空(nil)
多次調(diào)用被鏈接在一起形成一個鏈,如果任何一個節(jié)點為空(nil)將導致整個鏈失效鸵闪。
-
可選鏈的使用
- 在可選類型后面放一個問號,可以定義一個可選鏈暑诸。
- 這一點很像在可選值后面放一個嘆號來強制拆得其封包內(nèi)的值
- 它們的主要的區(qū)別在于當可選值為空時可選鏈即刻失敗
- 然而一般的強制解析將會引發(fā)運行時錯誤蚌讼。
- 因為可選鏈的結(jié)果可能為nil,可能有值.因此它的返回值是一個可選類型
- 可以通過判斷返回是否有值來判斷是否調(diào)用成功
- 有值,說明調(diào)用成功
- 為nil,說明調(diào)用失敗
可選鏈的示例
- 從可選鏈中取值
- 示例描述: 人(Person)有一個狗(Dog),狗(Dog)有一個玩具(Toy),玩具有價格(price)
- 使用代碼描述上述信息
// 1.定義類
class Person {
var name : String
var dog : Dog?
}
class Dog {
var color : UIColor
var toy : Toy?
init(color : UIColor) {
self.color = color
}
func runing() {
print("跑起來")
}
}
class Toy {
var price : Double = 0.0
}
// 2.創(chuàng)建對象,并且設置對象之間的關系
// 2.1創(chuàng)建對象
let person = Person(name : "小芳")
let dog = Dog(color : UIColor.redColor())
let toy = Toy()
toy.price = 100.0
// 2.2.設置對象之間的關系
person.dog = dog
dog.toy = toy
- 需求:獲取小明的大黃寵物的玩具價格
- 出的值為可選類型,因為可選鏈中有一個可選類型為nil,則返回nil
- 因此結(jié)果可能有值,可能為nil.因此是一個可選類型
let price = person.dog?.toy?.price
print(price) // Optional(100.0)\n
- 需求:給小明的大黃一個新的玩具
- 相當于給可選類型賦值
person.dog?.toy = Toy()
- 需求:讓小明的狗跑起來
- 如果可選類型有值,則會執(zhí)行該方法
- 如果可選類型為nil,則該方法不會執(zhí)行
person.dog?.runing()