可選項的型別

Optionals 是一個通用列舉型別,充當包裝器。此包裝器允許變數具有兩種狀態之一:使用者定義型別的值或 nil,表示缺少值。

這種能力在 Swift 中尤其重要,因為該語言的一個明確的設計目標是與 Apple 的框架配合良好。Apple 的許多(大多數)框架都使用 nil,因為它易於使用,並且對 Objective-C 中的程式設計模式和 API 設計具有重要意義。

在 Swift 中,對於具有 nil 值的變數,它必須是可選的。可以通過將 !? 附加到變數型別來建立可選項。例如,要使 Int 可選,你可以使用

var numberOne: Int! = nil
var numberTwo: Int? = nil

必須明確展開 ? 選項,如果你不確定該變數在訪問時是否具有值,則應使用該選項。例如,當將字串轉換為 Int 時,結果是可選的 Int?,因為如果字串不是有效數字,則返回 nil

let str1 = "42"
let num1: Int? = Int(str1) // 42

let str2 = "Hello, World!"
let num2: Int? = Int(str2) // nil

! 選項會自動解包,只有在你確定變數在訪問時才具有值時才能使用。例如,在 viewDidLoad() 中初始化的全域性 UIButton! 變數

//myButton will not be accessed until viewDidLoad is called,
//so a ! optional can be used here
var myButton: UIButton!

override func viewDidLoad(){
    self.myButton = UIButton(frame: self.view.frame)
    self.myButton.backgroundColor = UIColor.redColor()
    self.view.addSubview(self.myButton)
}