/ / Какво всъщност прави постоянното обвързване в превключвателните операции? - бързо, превключване-константа, константи

Какво прави постоянното свързване в изявленията за превключване всъщност? - swift, switch-statement, константи

Не ми е съвсем ясно как let се използва в switch изявления.

Помислете за това:

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


Според Документи на Apple:

[...] модели в случай могат също така да обвързват константи, използвайки ключовата дума let (те могат също така да обвържат променливи, използвайки ключовата дума var). Тези константи (или променливи) след това могат да бъдат препратени в съответната клауза където и в останалата част от кода в обхвата на случая. Това каза, ако случаят съдържа множество модели, които съответстват на контролния израз, никой от тези модели не може да съдържа постоянни или променливи връзки.


Какъв е кортежът (x, y) обвързан с моя пример и защо не мога да го препратя отново?

Отговори:

1 за отговор № 1

От цитата ви от документацията на Swift:

... след това може да се посочи в съответната клауза и където останалата част от кода в рамките на делото.

Така че в първия случай

case let (x,y) where x == y:
print("hello")

greeting (което е кортежът (1, 10)) е съпоставена с модел

let (x,y) where x == y

и ако съвпада, x е свързан към първия елемент на кортежа и y към втория.

Това обвързване е ограничено до обхвата на първия случай, и не може да се използва във втория или други случаи.

За да направите своя код компилиран, добавете друг let обвързващо за второто случай:

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