# Swift可选类型
Swift 还引入了选配 (optionals) 型,处理不存在的值。选配(Optionals)或者说“有一个值,它等于x”或“有没有值可言”。
可选 (Optional ) 是一种自己所有的,实际上是 Swift 新的超能力枚举之一。它有两个可能的值,无和有(T),其中T是 Swift 中提供正确的数据类型的关联值。
这里有一个可选的整数声明:
var perhapsInt: Int?
这里是一个可选的字符串声明:
var perhapsStr: String?
上述声明是相当于明确初始化为 nil ,这意味着没有任何值:
var perhapsStr: String? = nil
比方说,看看下面的例子来了解选配(optionals)如何工作在 Swift 中:
import Cocoa
var myString:String? = nil
if myString != nil {
println(myString)
}else{
println("myString has nil value")
}
当我们运行上面的程序在 playground 中,我们得到以下结果。
myString has nil value
选配(Optionals)类型似于使用 nil 在 Objective-C 中的指针,但它们对任何类型,不只是在类上工作。
**强制解包**
如果定义一个变量作为配选(optional)再获得这个变量的值,则必须解开它。这只是意味着把一个感叹号放在变量的末尾。
让我们来简单的例子:
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
println(myString)
}else{
println("myString has nil value")
}
当我们运行上面的程序在 playground 中,我们得到以下结果。
Optional("Hello, Swift!")
现在让我们来解包获得变量的正确值:
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
println( myString! )
}else{
println("myString has nil value")
}
当我们运行上面的程序在 playground 中,我们得到以下结果。
Hello, Swift!
**自动解包裹**
也可以使用感叹号,而不是一个问号声明可选变量。这种选配变量,会自动解开,不需要使用感叹号在变量的末尾获得分配的值。 让我们来看看下面的例子:
import Cocoa
var myString:String!
myString = "Hello, Swift!"
if myString != nil {
println(myString)
}else{
println("myString has nil value")
}
当我们运行上面的程序在 playground 中,我们得到以下结果。
Hello, Swift!
**可选绑定**
使用可选绑定以找出一个可选(optional)是否包含一个值,如果是这样,使该值可以作为一个临时常数或变量。
一个选配绑定 if 语句如下:
if let constantName = someOptional {
statements
}
让我们来看看一个简单的例子,显示了选配(optional)绑定的使用:
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if let yourString = myString {
println("Your string has - \(yourString)")
}else{
println("Your string does not have a value")
}
当我们运行上面的程序在 playground 中,我们得到以下结果。
Your string has - Hello, Swift!