Swift-可选链式调用
2016-05-19 本文已影响424人
周二可
概念
所谓可选链式调用就如同其名称那样可以看成一个个链环联接在一起的链条。每个链节就是一个获得可选值的调用(包括通过属性和下标来获取的以及函数返回的可选类型)。如果整个链条上每个链节都能获取值则调用成功,反之只要有一个链姐获取的可选值为nil整个调用链条返回nil。
格式
与强制解包(!)类似在想要调用的属性、方法、或下标的可选值后面放(?)。
// 调用获得可选类型属性的可选链
john.residence?.numberOfRooms
// 调用获得可选类型下标的可选链
// john的residence是可选属性
firstRoomName = john.residence?[0].name
// 通过key"Dave"取出的值是可选属性
var testScores = ["Dave": [86, 82, 84], "Bev": [79, 94, 81]]
testScores["Dave"]?[0]
// 调用返回可选类型的方法的可选链,
john.residence?.address?.buildingIdentifier()?.hasPrefix("The")
注意点<>
- Swift 的可选链式调用和 Objective-C 中向nil发送消息有些相像,但是 Swift 的可选链式调用可以应用于任意类型,能检查调用是否成功。并且不会像强制解包那样出现崩溃。
- 如果你访问的值不是可选的,可选链式调用将会返回可选值。
- 如果你访问的值就是可选的,可选链式调用不会让可选返回值变得“更可选”。
- ** 使用了可选链之后即使原本应该返回的结果不是可选类型也会被包装成对应的可选类型。**
- 通过可选链式调用访问一个Int值,将会返回Int?,无论使用了多少层可选链式调用。
- 类似的,通过可选链式调用访问Int?值,依旧会返回Int?值,并不会返回Int??。