In Swift, I understand that "let" defines a constant. No problem. So "let foo = 42" and "let foo: Int" make sense. But I see several instances where simply "let foo" is written without assignment or type specification. For example "case bar (let foo): ..."
What exactly happens when "let foo" by itself is in such code?
This notation is used to bind an associated value of an enumeration.
Take this for example:
let anOptionalInt: Int? = 15
switch (anOptionalInt) {
case .Some(let wrappedValue):
print(wrappedValue)
case .None:
print("the optional is nil")
}
This works because Optional
is an enumeration. The first expression can be written as:
let anOptionalInt: Optional<Int> = Optional.Some(15)
There are two cases: .Some
and .None
. In the .Some
case, there's an associated value, called Wrapped
, whereas the .None
case has no associated value.
In fact, Optional.None
is the same as nil
.