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!