发布于 ,更新于 

Swift 中的可空类型

Swift中的可空类型

印象中,C#语言很早就引入了可空类型。Swift语言也存在可空类型(也叫可选类型)。可空类型有个特有的特性,可空类型的变量,(1)要么有值 (2)要么为空(nil)。

声明可空类型,就是在类型名后面加一个“?”号。例如:

1
2
var opValue1 : String?
var opValue2 : String? = "abc" // 声明字符串可空类型,并初始化

可空类型是对普通类型的一种包装。如果需要取可空类型变量的值,就需要对可空类型进行拆包操作。拆包使用拆包操作符“!”,在变量的后面加上感叹号,就可以进行拆包,取得可空类型的具体数据,例如:

1
2
3
import Foundation
var opValue: String? = "superMe" // 声明字符串可空类型,并初始化
print(opValue!) // 使用!拆开取得可空类型的数据

以上拆包的操作必须保证可空变量的值有效,如果可空变量为nil,则拆包会导致程序运行错误,拆包之前需要先判断可空变量是否为nil。

1
2
3
if opValue != nil {
opValue!
}

这里建议不要对可空变量进行拆包,而建议采用第二种拆包取值方法,叫实例绑定。它是一种 if-let/if-var 语法结构,如下:

1
2
3
4
5
6
7
8
import Foundation
var opValue: Int32? = 1024 // 声明整数可空类型,并初始化
if let tmp = opValue { // if-let 语句对可空变量进行实例绑定,
// 绑定成功则返回true,为nil则返回false
print(tmp)
} else {
print("opValue为nil");
}

可以一次性给多个可空变量进行实例绑定,如下所示:

1
2
3
4
5
6
7
8
9
import Foundation
var opValue1: Int64? = 1024
var opValue2: Int64? = 2048
if let tmp1 = opValue1, let tmp2 = opValue2 { // 只有所有实例绑定都成功才返回true
print(tmp1)
print(tmp2)
} else {
print("opValue1或者opValue2为nil");
}