可选链式调用是一种可以在当前值可能为
nil
的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会成功;如果可选值是nil
,那么调用将返回nil
。多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为nil
,整个调用链都会失败,即返回nil
。
通过在想调用的属性、方法,或下标的可选值后面放一个问号(?
),可以定义一个可选链。这一点很像在可选值后面放一个叹号(!
)来强制解包它的值。它们的主要区别在于当可选值为空时可选链式调用只会调用失败,然而强制解包将会触发运行时错误
通过可选链调用无返回值的函数如何判断是否调用成功
通过可选链式调用给属性赋值会返回 Void?
,通过判断返回值是否为 nil
就可以知道赋值是否成功
class Name {
var xing:String
var ming:String
init(xing:String,ming:String){
self.xing = xing
self.ming = ming
}
func printName() {
print("姓:\(xing) 名:\(ming)")
}
}
var p = Person()
p.info = Name.init(xing: "Li", ming: "Ming")
if let result = p.info?.printName() {
print("调用成功,result = \(result)")// 打印的空
}else {
print(p.info?.printName()) // 打印的 nil
}
访问可选类型的下标
var dict = [1:[1,1]]
if let unit1 = dict[1]?[1] {
dict[1]?[1] = 2
}else {
print("可选调用失败")
}
print(dict)
连接多层可选链式调用
-
通过可选链式调用访问一个
Int
值,将会返回Int?
,无论使用了多少层可选链式调用。 -
类似的,通过可选链式调用访问
Int?
值,依旧会返回Int?
值,并不会返回Int??
。
网友评论