Swift: case foo (let bar): без типа или назначения?

В Swift я понимаю, что "let" определяет константу. Без проблем. Так что "let foo = 42" и "let foo: Int" имеют смысл. Но я вижу несколько случаев, когда просто пишется "let foo" без присваивания или указания типа. Например, "case bar (let foo):..."

Что именно происходит, когда в таком коде присутствует сам по себе «let foo»?


person Harold    schedule 24.07.2016    source источник
comment
Не могли бы вы показать и исполняемый пример?   -  person Alexander    schedule 24.07.2016
comment
Где-то в коде будет объявление case типа case bar(Int)   -  person Midhun MP    schedule 24.07.2016


Ответы (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 связанного значения нет.

На самом деле Optional.None совпадает с nil.

person Alexander    schedule 24.07.2016