/ / Čo vlastne robí konštantná väzba v príkazoch switch? - rýchle, prepínacie, konštanty

Čo v skutočnosti robia konštantné záväzky v prepínačoch? - rýchle prepínanie, konštanty

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ď č. 1

Z 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")
}