Swift选配(Optionals)
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!