强制解析
可以使用 if 语句来判断一个可选的是否包含一个值。如果包含一个值,结果为 true ;否则 false。
如果你确定可选包含一个值,你可以在名称后面加惊叹号 ( ! ) 访问可选的值。惊叹号 ( ! )表示:“ 这个可选有值,请使用它。” 这就是所谓的 强制解析(forced unwrapping)可选的值。
if convertedNumber {
println("\(possibleNumber) has an integer value of \(convertedNumber! )")
} else {
println("\(possibleNumber) could not be converted to an integer")
}
// prints "123 has an integer value of 123"
注意:如果用 ! 来获取一个不存在的可选值会导致运行时错误。使用 ! 来强制解析值之前,一定要确定可选包含一个非 nil 的值(if判断一下)。
可选绑定
可选绑定(optional binding)用来判断可选是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定一般用在 if 和 while 语句中,对可选的值进行判断并把值赋给一个常量或者变量。
if let constantName = someOptional {
statements
}
if let actualNumber = possibleNumber.toInt() {
println("\(possibleNumber) has an integer value of \(actualNumber)")
} else {
println("\(possibleNumber) could not be converted to an integer")
}
// prints "123 has an integer value of 123"
这段代码表示:“ 如果 possibleNumber.toInt 返回的可选 Int 包含一个值,创建常量 actualNumber,并将可选包含的值赋给它。”
如果转换成功,actualNumber 常量可以在 if 语句的第一个分支中使用。actualNumber已经被初始化,所以不需要再使用 ! 获取它的值。在这个例子中,actualNumber用来输出转换结果。
你可以在可选绑定中使用常量和变量。如果你只想在if语句的第一个分支中使用actualNumber的值,你可以改成 if var actualNumber,这样可选包含的值就会被赋给一个变量而非常量。