let number = "123"
// let number = "hello"
let convertNumerber = Int(number)
if (convertNumerber != nil) {
print("convertNumber is \(convertNumerber!)")
} else {
print("convertNumber is \(convertNumerber)" )
}
如果你确定可选包含一个值,你可以在名称后面加惊叹号 ! 访问可选的值。
惊叹号 ! 表示:“ 这个可选有值,请使用它。”
使用!表示把这个可变类型‘降级’为不可变类型
这就是所谓的 强制解析(forced unwrapping)可选的值
也叫拆包
可空类型的精度(取值范围)大于不可控类型,所以拆包又叫强制解析
如果用 ! 来获取一个可选值可能会导致运行时错误。所以,
使用 ! 来强制解析值之前,一定要确定可选包含一个非 nil 的值(if判断一下)
可选绑定(optional binding)用来判断可选是否包含值,
如果包含就把值赋给一个临时常量或者变量。
可选绑定一般用在 if 和 while 语句中,
对可选的值进行判断并把值赋给一个常量或者变量,例子如下
// let number1 = "123"
let number1 = "hello"
if let convertNumerber1 = Int(number1) {
print("convertNumber1 is \(convertNumerber1)")
} else {
print("convertNumber1 is nil ")
}
以上代码表示:“ 如果 Int(number1) 返回的可选 Int 包含一个值,
创建常量 convertNumerber1,并将可选包含的值赋给它。”
如果转换成功,convertNumerber1 常量可以在 if 语句的第一个分支中使用。
convertNumerber1已经被初始化,所以不需要再使用 ! 获取它的值。
在这个例子中,convertNumerber1用来输出转换结果。
你可以在可选绑定中使用常量和变量。
通过给可选的变量赋值给nil来表示他们没有值
var serverResponseCode :Int? = 404
print(serverResponseCode)
serverResponseCode = nil
print(serverResponseCode)
var myBananaCount:Int?
print(myBananaCount)
var myAppleCount = 3
myAppleCount = nil
但是nil不能用于非可选的常量或者变量。
如果代码中有常量或者变量需要处理值缺失的情况,把他们声明称对应的可选类型
如果一个可选的常量或者变量没有提供默认值,他们会被自动设置为nil
Swift 的 nil 和 Objective-C 的 nil 并不一样。
在 Objective-C 中,nil 是一个指向不存在对象的指针
在 Swift 中,nil 不是指针,它是一个确定的值,用来表示值的缺失。
任何类型的可选都可以被设置为 nil,不只是对象类型。