变量或常量在某些情况下可能表示的是未被赋值的情况,若直接不对某一类型的变量赋值,会提示该变量未初始化不可用。这时就需要可选型,可选型有两种值,一种是变量类型的值,另一种是未赋值类型 nil。声明变量时,在变量类型的后面加一个?
,则该变量为可选型。
var optionalString: String?
print(optionalString)
输出结果:
nil
在很多情况下,需要对可选型进行是否有值的逻辑判断,这时可以配合let
使用
var optionalName: String? = "Mark"
if let name = optionalName {
print("Hello \(name)!")
} else {
print("Hello!")
}
按目前理解,其实效果等同于
var optionalName: String? = "Mark"
if optionalName != nil {
print("Hello \(optionalName!)!")
} else {
print("Hello!")
}
在变量名后加!
相当于对可选型拆包,去取其真正的值,如果该可选型数据的值是 nil,则此时程序会崩溃。所以配合是否有值的判断,在确认有值的情况下才可对其强制拆包。
为了能够方便地访问可选型,我们可以将可选型后面的?
换成!
,这种方式称为隐式拆包,因为在拆包时在变量或常量后面不需要再加!
。
var optionalName: String! = "Mark"
if optionalName != nil {
print("Hello \(optionalName)!")
} else {
print("Hello!")
}