可选链(Optional Chaining)

134 阅读1分钟
class Car { var price = 0 } 
class Dog { var weight = 0 } 
class Person { 
  var name: String = "" 
  var dog: Dog = Dog() 
  var car: Car? = Car() 
  func age() -> Int { 18 } 
  func eat() { print("Person eat") }
  subscript(index: Int) -> Int { index } 
} 
var person: Person? = Person() 
var age1 = person!.age() // Int    !强制解包 可能会崩溃 
var age2 = person?.age() // Int?   ?可选项 如果person为nil,则不会执行?后面的.age()方法
var name = person?.name // String? 
var index = person?[6] // Int? 
  • 如果可选项为nil,调用方法、下标、属性失败,结果为nil
  • 如果可选项不为nil,调用方法、下标、属性成功,结果会被包装成可选项
  • 如果结果本来就是可选项,不会进行再次包装