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 = "abc"

if let realStr = str {

print(realStr)

}

我们还可以使用Optional泛型提供的unsafelyUnwrapped方法进行解包:

var str: Optional = "abc"

let count = str.unsafelyUnwrapped.count

print(count)

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: