为什么在分配期间?
中的a?
会取消包装值?
据我所知,可选链中的行为类似,但据我所知,在变量上的?
之后应始终跟着调用,成员查找或下标。
var x: Int? = 42
if case let a? = x {
print(a)
}
答案 0 :(得分:3)
这是用于期权模式的语法糖。 option pattern上的文档说:
可选模式匹配
some(Wrapped)
枚举的Optional<Wrapped>
情况下包装的值。可选模式包括一个标识符模式,其后紧跟一个问号,并与枚举用例模式在相同的位置出现。
因此,您的代码与:
var x: Int? = 42
if case .some(let a) = x {
print(a)
}
对于简单的if
语句而言,这并不常见,因为您可以这样做:
if let a = x {
print(a)
}
但是考虑用可选的包裹的枚举:
enum Foo {
case bar
case baz
}
let y: Foo? = .bar
switch y {
case .none: break
case .some(.bar): break
case .some(.baz): break
}
使用一些糖可以更简洁地编写此开关:
switch y {
case nil: break
case .bar?: break
case .baz?: break
}