可选链(Optional Chaining)
如果可选项为nil,调用方法、下标、属性失败,结果为nil
如果可选项不为nil,调用方法、下标、属性成功,结果会被包装成可选项
如果结果本来就是可选项,不会进行再次包装
class Person {var name: String = "Jack"var age: Int = 20func eat() {}}var p: Person? = Person()var name = p?.namevar age = p!.agevar 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? = 5num1? = 10 // Optional(10)var num2: Int? = nilnum2? = 10 // nil
