Swift_Optional

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 coalesce
var 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”
!!

END

你可能感兴趣的:(Swift_Optional)