Не ми е съвсем ясно как 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")
}