In the code block below, I am having trouble understanding let x where x.hasSuffix(\"pepper\")
.
let vegetable = \"red pepper\"
switch vegetable {
vegetable
is an implicit String
. It's the same as you would write:
var vegetable: String = "red pepper"
hasSuffix
is declared as func hasSuffix(suffix: String) -> Bool
an therefore returns a Bool
. The where
keyword specifies additional requirements, and can only be used in switch
statements.
Because all of this is suffused, the vegetable
variable is assigned to x (let x
).
You can read more about the where
and switch
here.
There is actually no reason to use let x
in this scenario. case let x where x.hasSuffix("pepper"):
can simply be replaced with case vegetable where vegetable.hasSuffix("pepper")
. In this scenario, an extra variable x
is declared which copies vegetable
. This is useless, and arguable reduces readability, even if you renamed x
to vegetable
as well.
Using let
in a switch statement case is useful in other cases, such as when the "argument" (vegetable) is not a variable, e.g. switch(getVegetableName())
, or in the case where the "argument" is a tuple, and needs to be unpacked, such as in
let vegetableNameAndCountry = ("Sweet Potato", "United States")
switch(vegetableNameAndCountry) {
case (let vegetable, let country) where country == "Tanzania":
print("This \(vegetable) comes from a country north of Kenya")
case ("Sweet Potato", _): // Note here I ignore the country, and don't even bother creating a constant for it
print("Sweet sweet potatoes")
default:
print("We don't care about this vegetable")
}