可选类型(Optionals)
Objective-C中没有可选类型的概念,但是swift中的可选(Optional)类型,用于处理值缺失的情况。
在可选类型名称后面加个问号 ?
,来定义一个可选类型,如下所示:
01.png
当我们声明一个可选变量或者可选属性的时候没有提供初始值,它的值会默认为 nil。可选类型的输出默认会有Optional,如下代码所示:
var age2 : Int? = 10
print(age2) //Optional(10)
Tips:
但是像下面这种情况,赋值为 nil 会报错,因为不是可选类型的声明。
02.png
强制解包(Forced Unwrapping)
可选项是对其它类型的一层包装,Optional 是一个含有两种情况的枚举,None 和 Some(T),用来表示可能有或可能没有值,可以理解为一个盒子。
① 如果为nil ,那么是个空盒子;
② 如果不为nil,那么盒子里面装的是被包装类型的数据。
例:
var age : Int? //默认就是nil
age = 10
print(age) //Optional(10)
如果要从可选项中取出来被包装的数据(将盒子里面的东西取出来),需要使用**感叹号!
** 进行强制解包。
var age : Int? //默认就是nil
age = 10
print(age!) //10
Tips:
如果对值为nil的可选项进行强制解包,将会产生运行时错误。
03.png
所以一般进行解包的时候,都需要判断可选项是否包含值。
let num = Int("123456"); if num != nil { print("字符串转换成功\(num!)") } else { print("字符串转换失败!") } ///字符串转换成功:123456
可选项绑定(Optional Binding)
可选绑定(optional binding)用来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。
可选绑定一般配合if语句来对可选类型的值进行判断。
【 例: 】
if let num = Int("123456") {
print("字符串转换成功:\(num)")
} else {
print("字符串转换失败!")
}
隐式解包(Implicitly Unwrapped Optional)
- 在某些情况下,可选项一旦被设定值之后,就会一直拥有值;
- 这种情况,不必每次访问的时候都进行解包,因为能够确定每次访问都有值;
- 在类型后面加个**
感叹号!
** 定义一个隐式解包的可选项。
let num1 : Int = 10
var num2 = num1 + 10;
print("num2:",num2) //num2: 20
Tips:
如果对值为nil的可选项进行强制解包,也会产生运行时错误。
04.png
以上就是可选类型使用方法的记录,以及强制解包的注意事项,记录于此,方便日后查阅学习。