//1.if语句以及强制解析
//可以使用if语句和nil比较来判断一个可选值是否包含值,可以使用“==”,'!= ' 来执行比较
//如果可选类型有值,它将不等于nil
var num:Int? = 3
if num != nil {
print("值不为空")
}
//感叹号 !
//当你判断一个可选类型确实包含值之后,你可以在可选的名字后面加上感叹号(!)来获取值,这个感叹号表示“我知道这个可选类型有值,请使用它”。这个被称为可选值的强制解析。
//注意:使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。
//2.可选绑定
//使用可选绑定来判断可选类型是否包含值,如果包含,就把值赋值给一个临时常量或者变量。可选绑定可以用在if和while语句中,这条语句不仅可以用来判断可选类型是否有值,同时把可选类型的值赋给常量或者变量。
let empty:String? = nil
if let constName = num {
print(constName)
}
if let em = empty {
print("aaaaaa")
}else{
print("判断为假")
}
if let firstNumber = Int("4"), let secondNumber = Int("42"), firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// 输出 "4 < 42 < 100"
if let firstNumber = Int("4") {
if let secondNumber = Int("42") {
if firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
}
}
// 输出 "4 < 42 < 100"
//注意:在if条件语句中使用常量和变量来创建一个可选绑定,仅在if语句的句中(body)中才可以获取可选绑定的值。
//相反,在guard语句中使用常量和变量来创建一个可选绑定,仅在guard语句外且在语句后才能获取到值。
//3.隐式解析可选类型
/*
如上所述,可选类型暗示了常量或者变量可以“没有值”。可选可以通过 if 语句来判断是否有值,如果有值的话可以通过可选绑定来解析值。
有时候在程序架构中,第一次被赋值之后,可以确定一个可选类型总会有值。在这种情况下,每次都要判断和解析可选值是非常低效的,因为可以确定它总会有值。
这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。
当可选类型被第一次赋值之后就可以确定之后一直有值的时候,隐式解析可选类型非常有用。隐式解析可选类型主要被用在 Swift 中类的构造过程中
*/
let possibleString :String? = "An optional string"
let forcedString :String = possibleString! //需要感叹号来获取值,没有感叹号会报错
let assumeString :String! = "一个隐式解析可选值"
let implicitString :String = assumeString //不需要感叹号
//你可以把隐式解析可选类型当做一个可以自动解析的可选类型。你要做的只是声明的时候把感叹号放到类型的结尾,而不是每次取值的可选名字的结尾。
//注意:
//如果你在隐式解析可选类型没有值的时候尝试取值,会触发运行时错误。和你在没有值的普通可选类型后面加一个惊叹号一样。
//4.错误处理
//可以使用 错误处理来应对程序执行中可能遇到的错误条件。