怎么样?打开一个可选的情况下让声明?

时间:2019-04-27 10:35:58

标签: swift

为什么在分配期间?中的a?会取消包装值?

据我所知,可选链中的行为类似,但据我所知,在变量上的?之后应始终跟着调用,成员查找或下标。

var x: Int? = 42

if case let a? = x {
    print(a)
}

1 个答案:

答案 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
}