可选项的类型

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)
}