Optionl : 可选类型,可以让我们在一个具体的类型和nil之间进行选择
在swift中nil是一个类型,不能和其他的类型共存
var errorCode : Int = nil //这样会报错,不能直接把nil赋值给Int类型
var errorCode2 : Int? = nil //这是正确的书写方式,在int后面加上“?”,表示errorCode2可以为Int类型,也可以为nil;
可选型解包
var errorCode : String? = "404"
erorrCode! //在变量后边加上“!”进行强制解包。当变量为nil时,解包时存在一定的风险
//if语句进行解包
if let errorCode = errorCode{
print("the errorCode is " + errorCode)
}else{
"no erorr"
}
多次解包嵌套
//第一种方法
var errorMessage:string? = "not found"
if let errorCode = errorCode{
if let errorMessage = errorMessage{
print("the errorCode is \(errorCode) and errorMessage is \(errorMessage)")
}
}
//第二种方法
if let errorCode = errorCode , errorMessage = errorMessage{
print("the errorCode is \(errorCode) and errorMessage is \(errorMessage)")
}
optional chaining
var errorMessage:String? = nil
var upercaseErrorMessage = errorMessage?.uppercaseString //在errorMessage后面加“?”意思是对error进行尝试解包,当errorMessage不为nil时,解包成功并继续向后运行,为nil时则解包失败,不会报错,也不会向后运行
var upercaseErrorMessage = errorMessage!.uppercaseString //对errorMessage进行强制解包,当errorMessage = nil 时会报错
nil coalescevar errorMessage : String? = nil
letMessage:String
if let errorMessage = errorMessage{
message = errorMessage
}else{
message = "no error"
}
//对上面的判断进行更简单的写法
let message = errorMessage ?? "No error" //“??”对errorMessage进行判断,如果有值就取errorMessage,若为nil,就取值“No error”
!!