位置:首页 > 高级语言 > Swift在线教程 > Swift选配(Optionals)

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!