Swift4语法极简手册 — Optional Chaining

Swift4语法极简手册

第十七章节:Optional Chaining

Optional Chaining是对Optional值的访问,你可以链式的方式来访问Optional的值,包括属性,方法,subscript等

Optional Chaining

使用(?)来访问一个Optional值,我们通过一个例子来认识Optioanl Chaining的作用

1
2
3
4
5
6
7
8
9
class Person {
var residence: Residence?
}
class Residence {
var numberOfRooms = 1
}
let person = Person()

不使用Optional Chaining的访问方法

1
2
3
if let residence = person.residence {
let rooms = residence.numberOfRooms
}

如上代码所示,因为是Optional,我们要先判断,所以用if

如果optional层级一多,就会有许多if,这样使得代码或逻辑都不简洁,因此我们需要改善

使用Optional Chaining

1
let rooms = person.residence?.numberOfRooms

非常简洁

Optional Chaining就是使用(?)来访问一个Optional值,它表示有可能为空,也有可能有值;

  • 如果为空,则整个表达式为nil,在if中则为false
  • 如果有值,则返回non-null值,以供继续调用其方法或属性等

因为整个表达式可能为nil,所以Optional Chaining表达式返回的值一定是Optional

1
2
let rooms = person.residence?.numberOfRooms
//rooms是Optional(Int)而不是Int

Optional可以是链式的,这可以让你非常方便的处理多级Optional的情况

1
2
3
4
5
if let johnsStreet = john.residence?.address?.street {
print("John's street name is \(johnsStreet).")
} else {
print("Unable to retrieve the address.")
}