可选项的本质
- 可选项的本质是enum类型
这是底层可选项的代码,可以看出本质是enum
var age: Int? = 10
等价于以下四种:
var age0: Optional<Int> = Optional<Int>.some(10)
var age1: Optional = .some(10)
var age2 = Optional.some(10)
var age3 = Optional(10)
var age: Int? = nil
等价于以下四种:
var age = nil
var age3 = .none
var age0 = Optional<Int>.none
var age1: Optional<Int> = .none
switch举例:
var age: Int? = .none
age = 10
age = .some(20)
age = nil
switch age {
//必须带?才会对age自动解包并赋值给v
case let v?:
print("some", v)
case nil:
print("none")
}
也可以写成:
if let v = age {
print("some", v)
} else {
print("none")
}
还可以写成:
switch age {
case let .some(v):
print("some", v)
case .none:
print("none")
}
多重可选项的本质
var age_: Int? = 10
var age: Int?? = age_
age = nil
上面的可以写成如下两种形式:
var age0 = Optional.some(Optional.some(10))
age0 = .none
var age1: Optional<Optional> = .some(.some(10))
age1 = .none
var age: Int?? = 10
可以写成:
var age0: Optional<Optional> = 10