Это синтаксический сахар для шаблонов параметров.В документации по опционному шаблону написано:
Необязательный шаблон соответствует значениям, заключенным в 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
}