可选类型(optionals)来处理值可能缺失的情况 。
解释说明:对于从oc转swift的同学来讲,其实swift可选是比较容易理解的,可选类型其实对应oc的nil类型比较类似。oc的nil只是针对对象来说的。但是swift的可选类型(?)则是对结构体,枚举,c语言类型,并且对象(个人以为是swift里边的所有数据类型)。
直观表示废话不说直接上代码:(代码源于swift2.0 中文翻译)
serverResponseCode的类型是 Int? 可选类型,意思是这个变量是既可以是Int类型的变量也可以是nil,因此下方可以看到这个变量可以给nil值。之所以我会这么说明的意思是:如果这个变量如果不声明为optionals类型,是不可以赋值为nil的!大家不信的话可以亲自试一试
接下来揭开可选的几种类型:
(1)强制解析:
当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个惊叹号表示“我知道这个可选有值,请使用它。”这被称为可选值的强制解析(forced unwrapping)。如下代码解释说明:
if convertedNumber != nil { print("convertedNumber has an integer value of \(convertedNumber!).")
}
// 输出 "convertedNumber has an integer value of 123."
(2)可选绑定 :
使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中,这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。
if let actualNumber = Int(possibleNumber) { print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else { print("\'\(possibleNumber)\' could not be converted to an integer")
}
可选绑定于控制流语句紧密结合 let actualNumber = Int(possibleNumber),当Int(possibleNumber)为nil的时候这条语句本来是编译不能通过的,当编译不能通过的时候, 这时候进入else分支里
(3)隐式解析可选类型:
这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型。 如下代码:
let possibleString: String? = "An optional string."
let forcedString: String = possibleString! // 需要惊叹号来获取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString // 不需要感叹号