强制解析
当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值
。这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping)
var optionalStr:String? = nil
if optionalStr != nil {
print("optionalStr 的值为:\(optionalStr)")
}else {
print("optionalStr 的值为:nil")
}
//打印输出:optionalStr 的值为:nil
optionalStr = "Hello, Swift!"
if optionalStr != nil {
print("可选类型的值:\(optionalStr)")
}else {
print("optionalStr 的值为:nil")
}//打印输出:可选类型的值:Optional("Hello, Swift!")
//强制解析可选类型(!)
if optionalStr != nil {
// 强制解析
print("强制解析结果:\(optionalStr!)")
}else{
print("optionalStr 值为 nil")
}//打印输出:强制解析结果:Hello, Swift!
使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值
。
自动解析
可以在声明可选变量时使用感叹号(!)替换问号(?)
。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析
//自动解析
var myString:String!
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值为 nil")
}//打印输出:Optional("Hello, Swift!")
看这输出的结果貌似没有解析到值
可选绑定
使用可选绑定(optional binding)来判断可选类型是否包含值,
如果包含就把值赋给一个临时常量或者变量
。
可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。
可选绑定的声明形式:
if let constantName = someOptional {
statements
}
示例:
//可选绑定
var optionalBindingStr:String?
optionalBindingStr = "Hello, Swift!"
if let tempStr = optionalBindingStr {
print("字符串值为 - \(tempStr)")
}else {
print("字符串没有值")
}//打印输出:字符串值为 - Hello, Swift!
网友评论