可选链(Optional Chaining)
如果可选项为nil,调用方法、下标、属性失败,结果为nil
如果可选项不为nil,调用方法、下标、属性成功,结果会被包装成可选项
如果结果本来就是可选项,不会进行再次包装
class Person {
var name: String = "Jack"
var age: Int = 20
func eat() {
}
}
var p: Person? = Person()
var name = p?.name
var age = p!.age
var eat = p?.eat()
print(name, age, eat) // Optional("Jack") 20 Optional(())
多个?可以链接在一起,如果链中任何一个节点是nil,那么整个链就会调用失败
class Dog {
var weight: Int = 10
}
class Car {
var price = 0
}
class Person {
var car: Car?
var dog: Dog = Dog()
}
var p: Person? = Person()
var dog = p?.dog // Dog?
var weight = p?.dog.weight // Int?
var price = p?.car?.price // Int?
当给可选项赋值时,也可以通过添加?,来实现只有当变量有值时,才能进行赋值
var num1: Int? = 5
num1? = 10 // Optional(10)
var num2: Int? = nil
num2? = 10 // nil