Optional 是 Swift 的一个非常重要的特性,它除了提供类型安全的机制,也是 Swift 中很多语言特性的核心。当然,使用 Optional 时也要了解很多坑,这样能帮助我们更好的运用它。
Optional
Optional 是 Swift 中一种特殊的类型,它本身有一个枚举的定义,简单来说就是这个形式:
enum Optional { case None case Some }
当然,Swift 中这个枚举的实际定义要复杂的多,这里只为了帮助大家最简单的了解。一个 Optional 的值,要么是空(None), 要么就会包含一个值(Some)。
比如我们可以声明一个 Optional 的 String 类型的变量,只需要在变量定义的时候在类型后面加上一个?
:
var name: String?
如果这个变量是标识成 Optional 的,我们在引用它的时候就必须做一些特殊的处理,可以使用强制解包:
print(name!)
在变量后面添加一个!
,相当于告诉编译器,我确信这个变量不是 nil,可以直接使用(当然,使用强制解包只代表你自己确认它不为 nil,但它还是有可能为 nil 的,如果这样的情况发生,依然会造成程序运行时崩溃)。
相比使用强制解包,更加安全和优雅的方式是使用 Optional Chaining: