使用可选链式调用代替强制展开
可选链式调用是一种在当前值可能为nil的可选值上请求和调用属性、方法及下表的方法。如果可选值为有值,那么调用就会成功;如果可选值是nil,那么调用将会返回nil。多个调用可以连接在一起形成一个调用链,如果其中一个借点为nil,整个调用都会失败,立即返回nil。
//注释
1.可选链式调用的引入,成功的避免了开发中出现一些意外情况(对象无对应的方法导致的崩溃)。
2.我们在强制解包时需要特别注意是否真的不存在nil的情况,如果真的不存在可以使用。如果有可能存在就加一成判断即可。
个人建议:还是加一成判断比较安全。
通过可选链式调用访问属性
如果等号左边链式调用失败,那么右边就不会执行。
通过可选链式调用调用方法
可以通过可选链式调用来调用方法,并判断是否调用成功,即使这个方法没有返回值。
如果在可选值上通过可选链式调用来调用无返回值方法,该方法的返回类型会是Void?,而不是Void,因为通过可选链式调用得到的返回值都是可选的。这样我们就可以使用if语句来判断能否成功调用printNumberOfRooms()方法,即使方法本身没有定义返回值。通过判断返回值是否为nil可以判断调用是否成功:
同样的,可以据此判断通过可选链式调用为属性赋值是否成功。在上面的通过可选链式调用访问属性的例子中,我们尝试给john.residence中的address属性赋值,即使residence为nil。通过可选链式调用给属性赋值会返回Void?,通过判断返回值是否为nil就可以知道赋值是否成功:
注释:
1.可选链式调用是一种在当前值可能为nil的可选值上请求和调用属性、方法及下表的方法。
2.通过可选链式调用得到的返回值都是可选的。
通过可选链式调用访问下标
通过可选链式调用,我们可以在一个可选值上访问下标,并且判断下标调用是否成功。
注意
通过可选链式调用访问可选值的下标时,应该将问号放在下标方括号的前面而不是后面。可选链式调用的问号一般直接跟在可选表达式的后面。
试例:
问号在下标前,表示residence为optional的。
问号在下标后,表示testScores["Brian"]为optional的。
连接多层可选链式调用
可以通过连接多个可选链式调用在更深的模型层级中访问属性、方法以及下标。然而,多层可选链式调用不会增加返回值的可选层级。