swift5 基本语法-可选类型&强制解包

444 阅读2分钟
可选类型(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

以上就是可选类型使用方法的记录,以及强制解包的注意事项,记录于此,方便日后查阅学习。