使用可选绑定(optionals binding)来判断可选绑定是否包含值,如果包含就把赋值给一个临时的变量或常量。可选绑定可以用在if和while语句中来对可选类型值进行判断,并把值赋值给一个常量或者变量。
if语句中一个可选绑定
if let constantName = someOptionals{
statements
}
用可选绑定(optionals binding)重写actualNumber = int(possibleNumber)
if let actualNumber = int(possibleNumber){
print("\'\(possibleNumber)' has an integer value of \(actualNumber)")
}else{
print("'\(possibleNumber) could not be coverted to an integer'")
}
//输出:"123"has an integer vaule of 123
隐式解析可选类型(implicitly unwrapping optionals)
可选类型暗示了常量或者变量可以“没有值”。可选可以通过if语句来判断是否有值,如果有值的话可以通过可选绑定来解析值。
把想要用作可选类型的后面的问好(String?)改成感叹号(String!)来生命一个隐式解析可选类型
当可选类型被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选类型非常有用。一个隐式可选类型其实就是一个普通的可选类型,但是可以被当作非可选类型来使用,并不需要每次都使用解析来获取值,下面的例子展示可选类型String? 和隐式可选类型String!之间的区别
let possibleString :String? = "An optional string"
let forcedString:string! = possibleString//需要感叹号(!)来获取值
let assumneString! = "An implicitly unwrapping optiona string.l"
let implicitString:String = assumneString//不需要感叹号
你可以把隐式解析可选类型当作一个可以自动解析的可选类型。你可以做的只是在声明的时候把感叹号放到类型的结尾,而不实每次取值的可选名字的结尾
注意:如果你在隐式解析可选类型没有值的时候尝试去取值,会触发运行时的错误。和你在没有值的普通可选类型后面加一个“!”一样
你仍然可以把隐式解析可选类型当作普通可选类型来判断它是否包含值:
if assumenedString != nil{
}
你也可以在可选绑定中使用隐式解析可选类型来检查并解析它的值
if let definteString = assumenedString{
}
注意:如果一个变量之后可能变成nil的话,请不要使用隐式解析可选类型。如果你需要在变量的生命周期中判断是否是nil的话, 请使用普通可选类型。
网友评论