Swift 還引入了選配 (optionals) 型,處理不存在的值。選配(Optionals)或者說“有一個值,它等于x”或“有沒有值可言”。
可選 (Optional ) 是一種自己所有的,實際上是 Swift 新的超能力枚舉之一。它有兩個可能的值,無和有(T),其中T是 Swift 中提供正確的數(shù)據(jù)類型的關聯(lián)值。
這里有一個可選的整數(shù)聲明:
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 中,我們得到以下結(jié)果。
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 中,我們得到以下結(jié)果。
Optional("Hello, Swift!")
現(xiàn)在讓我們來解包獲得變量的正確值:
import Cocoa var myString:String? myString = "Hello, Swift!" if myString != nil { println( myString! ) }else{ println("myString has nil value") }
當我們運行上面的程序在 playground 中,我們得到以下結(jié)果。
Hello, Swift!
也可以使用感嘆號,而不是一個問號聲明可選變量。這種選配變量,會自動解開,不需要使用感嘆號在變量的末尾獲得分配的值。 讓我們來看看下面的例子:
import Cocoa var myString:String! myString = "Hello, Swift!" if myString != nil { println(myString) }else{ println("myString has nil value") }
當我們運行上面的程序在 playground 中,我們得到以下結(jié)果。
Hello, Swift!
使用可選綁定以找出一個可選(optional)是否包含一個值,如果是這樣,使該值可以作為一個臨時常數(shù)或變量。
一個選配綁定 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 中,我們得到以下結(jié)果。
Your string has - Hello, Swift!