是什么:是一种可以在当前值可能为
nil
的可选值上调用属性、方法及下标脚本的过程
使用场景:请求或调用的目标当前可能为空(nil
),这时使用!
在一个连续调用的过程中有报错的可能。这时可以用作用域链的方式。
特点:
- 如果可选的目标有值,调用成功;否则一律返回
nil
。- 多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为
nil
,将导致整个链实效。- 不论你调用的属性、方法、下标脚本等返回的值是不是可选值,返回结果都是一个可选值。
适用类型:任意类型
17.1 可选链可替代强制解析
说明:在调用的属性、方法或下标脚本的可选值后面放一个
?
比较(与!
):当可选值为nil
时
强制解析 | 可选链 |
---|---|
引发运行时错误 | 可选链即刻实效 |
1 | //人 |
17.2 为可选链定义模型类
和定义普通类区别:期望用可选链调用的属性应当定义为可选型
17.3 通过可选链调用属性
方式:调用时在属性后面添加后缀
?
17.4 通过可选链调用方法
方式:调用时在方法名后面添加后缀
?
17.5 使用可选链调用下标脚本
方式:在下标脚本括号的前面添加
?
17.6 连接多层可选链式调用
说明:可以通过连接多个可选链式调用在更深的模型层级中访问属性、方法以及下标。
- 如果你访问的值不是可选的,可选链式调用将会返回可选值
- 如果你访问的值就是可选的,可选链式调用不会让可选返回值变得“更可选”
17.7 链接可选返回值的方法
说明:除了获得可选类型属性值,还可以通过可选链调用一个返回可选类型值的方法并按需链接该方法的返回值。
方式:在调用方法的括号的后面添加?
#综合案例:
1 | //人 |