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!