Nie je mi celkom jasné, ako na to let
sa používa v switch
príkazy.
Zváž toto:
let greeting = (1,10)
switch greeting {
case let (x,y) where x == y:
print("hello")
case (x,y) where x < y: //error here
print("what"s up")
default: "No match"
}
Podľa Apple docs:
[...] vzory v prípade môžu tiež viazať konštanty pomocou kľúčového slova let (môžu tiež viazať premenné pomocou kľúčového slova var). Na tieto konštanty (alebo premenné) sa potom môže vzťahovať príslušná klauzula, kde a do zvyšku kódu v rámci prípadu. Ak však prípad obsahuje viac vzorov, ktoré sa zhodujú s kontrolným výrazom, žiadny z týchto vzorov nemôže obsahovať konštantné alebo variabilné väzby.
Čo je n-tica (x, y)
viazaný na môj príklad a prečo je možné sa naň znova odvolávať?
odpovede:
1 pre odpoveď č. 1Z vašej ponuky z dokumentácie Swift:
... potom možno na ne odkazovať v zodpovedajúcej doložke a v celom texte zvyšok kódu v rámci veci.
Takže v prvom prípade
case let (x,y) where x == y:
print("hello")
greeting
(čo je n-tica (1, 10)
) sa zhoduje s vzor
let (x,y) where x == y
a ak sa zhoduje, x
je viazaný na prvý prvok v tuple a y
na druhý.
Táto väzba je obmedzená na rozsah prvého prípadu, a nemôže sa použiť v druhom alebo inom prípade.
Ak chcete kód skompilovať, pridajte ďalší let
viazanie na druhý prípad:
switch greeting {
case let (x,y) where x == y:
print("(x) is equal to (y)")
case let (x,y) where x < y:
print("(x) is less than (y)")
default:
print("No match")
}