可选项的类型
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)
}