Swift: case foo (let bar): без типа или присваивания?
В Swift я понимаю, что "let" определяет константу. Нет проблем. Так что "let foo = 42" и "let foo: Int" имеют смысл. Но я вижу несколько случаев, когда просто "let foo" пишется без присваивания или спецификации типа. Например, "case bar (let foo): ..."
Что именно происходит, когда "let foo" само по себе находится в таком коде?
1 ответ
Решение
Эта нотация используется для привязки ассоциированного значения перечисления.
Возьмите это к примеру:
let anOptionalInt: Int? = 15
switch (anOptionalInt) {
case .Some(let wrappedValue):
print(wrappedValue)
case .None:
print("the optional is nil")
}
Это работает, потому что Optional
это перечисление. Первое выражение может быть записано как:
let anOptionalInt: Optional<Int> = Optional.Some(15)
Есть два случая: .Some
а также .None
, в .Some
случай, есть связанное значение, называемое Wrapped
тогда как .None
case не имеет ассоциированного значения.
По факту, Optional.None
такой же как nil
,