在可选类型之前,我们有个概念要搞清楚,类型安全。 什么是类型安全呢? 从字面上理解,就是这个类型是安全的,即这个类型不可以被赋予其他类型的值。 比如一个string类型的变量,不可以被赋值一个int值。
OC是不是类型安全呢? 不是的,比如很多对象都可以被赋予nil,这就属于赋予其他类型。
在OC中,如果想要判断某个值是否含有有效值,我们通常会使用nil来判断,但是nil的作用范围仅限于大部分对象,对于struct等类型,还需要判断是否NSNotFound等
基于此,Swift语法中进行了改良,提供了可选类型,可选类型更像是一个集合,表明这个类的实例属于{该类, nil} 中的一种。上述提到Swift是类型安全的语言,一个对象,要么是属于一个类,要么是属于nil,我们无法将nil赋值给一个Int类型的对象,但是可以将nil赋值给一个Optional Int对象
// swift/stdlib/public/core/Optional.swift
public enum Optional : ExpressibleByNilLiteral {
case none //要么是none
case some(Wrapped) //要么是某个类
public init(_ some: Wrapped)
public func map(_ transform: (Wrapped) throws -> U) rethrows -> U?
public func flatMap(_ transform: (Wrapped) throws -> U?) rethrows -> U?
public init(nilLiteral: ())
public var unsafelyU