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,

Другие вопросы по тегам