Swift可空链式调用

可空链式调用和可空实例绑定区别:可空链式调用允许程序员把多个查询串联为一个可空实例的值。如果链式调用中的每个可空实例都包含之,那么每个调用都会成功。整个查询链会返回期望类型的可空实例。如果查询链式中的任意可空实例是nil,那么整个链式调用会返回nil。

示例:如果遇到404错误,就用自定义错误码及展示给用户的错误描述代替

1
2
3
4
5
6
7
var errorCodeString : String!
errorCodeString = "404"
var errorDescription: String?
if let theError = errorCodeString, let errorCodeInteger = Int(theError), errorCodeInteger == 404 {
errorDescription = "\(errorCodeInteger + 200): resource was not found"
}
var upcaseDescription = errorDescription?.uppercased()

重点在于最后一句代码!!!

这里使用errorDescription的大写形式给upcaseDescription赋值,使用了问号,为什么呢?因为errorDescription可能为nil。最后这句代码,如果errorDescription不为nil,则可以按照普通的可空实例进行强制展开使用!进行访问。但一旦为nil,就会触发运行时错误了。而用?访问时,无论errorDescription的值是否为nil都可以保证代码安全。

总结:在访问可能为nil可空实例的值的时候,用?来访问

1
2
3
4
var errorDescription: String?
errorDescription = "bayle"
errorDescription = nil
var upcaseDescription = errorDescription?.uppercased()

使用?时,无论errorDescription是否为nil,最后一句代码都不会报错。只是在errorDescription为nil时,upcaseDescription也是nil。

注意:

1
2
3
var name : String? = nil

name?.append("baylee") //name初始化为nil,append之后还是nil