1.为什么使用optional
由于swift语言是类型安全的,即在初始化变量或常量时,不能将其赋值为nil,否则会报错:
var a = nil
然而,我们在定义变量时并不一定要初始化,函数的返回值并不一定有具体的值,这就为我们使用变量带了不便,故swift提供了optional,即可选类型,来缓解这个问题。
可选类型,顾名思义即使用该类型的声明的变量可以有值,亦可以没有值(nil)。
2.optional的使用
在swift中,在声明变量的类型后面加上?即可申明可选类型:
var str: String? = "abc"
由于可选类型变量的值有可能为nil,故不能直接使用,在swift中,主要有以下四种方式使用optional:
optional拆包 var str: String? = "abc"
print(str!.count) // 使用!进行拆包
optional隐式拆包 var str: String? = "abc"
print(str!.count)
optional binding var str: String? = "abc"
if let realStr = atr {
print(realStr.count)
}
optional选择链 var str: String? = "abc"
let count = str?.count // count仍是可选类型
// 对count使用拆包方式进行访问
if count != nil {
let lastIndex = count! - 1
print(lastIndex)
}
3.optional原理浅析
optional并不是swift语言本身带有的特性,而是通过枚举实现的,下图是swift源码截图
我们可以通过如下方式定义可选类型,其效果完全等同于上述使用?的方式
var str: Optional
if let realStr = str {
print(realStr)
}
我们还可以使用Optional泛型提供的unsafelyUnwrapped方法进行解包:
var str: Optional
let count = str.unsafelyUnwrapped.count
print(count)
参考链接
发表评论