位置:首頁 > 高級語言 > 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!