Swift-Optional实质
底层实现
我们先看看Swift中Optional是怎么实现的把
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public enum Optional<Wrapped> : _Reflectable, NilLiteralConvertible { case None case Some(Wrapped) public init() public init(_ some: Wrapped) @warn_unused_result public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U? @warn_unused_result public func flatMap<U>(@noescape f: (Wrapped) throws -> U?) rethrows -> U? public init(nilLiteral: ()) }
|
很明显可以看出,它实际是一个枚举。
.Some的关联值就是我们解包出来的
? & !
在我们对一个Optional的变量进行赋值的时候,我们实际上是将初始值放到.Some中,取值是则是从.Some中取出。
!
- 强制解包,告诉系统这个变量不为
nil 且 .Some中一定有值
- 如果为空则会崩溃
?
- 解包时会先判断是否为
nil如果不为空则正常解包,否则会返回nil即默认初始值