Noop dla wyczerpujących instrukcji przełącznika Swifta

88

Swift wymaga wyczerpujących instrukcji przełączania, a każdy przypadek ma kod wykonywalny.

Etykieta „case” w „przełączniku” powinna zawierać co najmniej jedną instrukcję wykonywalną

Czy ktoś zdecydował się na dobry sposób na załatwienie spraw, w których nie chcesz nic robić? Mogę tam umieścić println (), ale wydaje się to brudne.

Sean McMains
źródło

Odpowiedzi:

150

Zgodnie z książką musisz breaktam użyć :

Zakres każdego przypadku nie może być pusty. W rezultacie musisz dołączyć co najmniej jedno stwierdzenie po dwukropku (:) każdej etykiety przypadku. Użyj pojedynczej breakinstrukcji, jeśli nie zamierzasz wykonywać żadnego kodu w treści dopasowanej sprawy.

Sergey Kalinichenko
źródło
8
Och, znowu Swift łamie prawo minimalnej niespodzianki :)
Sulthan
10
@Jiaaro Potrzeba breakwskazuje, że gałęzie bez breakmogą się przewrócić.
RnMss
4
Prosty ()wokrs też. Niemniej jednak wolę, breakbo to wyjaśnia sprawę. Użyj słowa kluczowego, fallthrougaby przejść przez instrukcje.
cLar
1
Jest to dość denerwujące, gdy chcesz krótko skomentować jedyną linię, która ma miejsce default:. To nie wydaje się dobre. Zgadzam się również, że sugeruje to upadek c przez zachowanie, co nie jest tym, co robi Swift (chociaż miło wiedzieć, że może spaść).
Benjohn,
1
I musiałem tu przyjechać tylko po to, żeby się upewnić, że przerwa nie przerwie wcześnie zamykającej pętli ..
JulianSymes
12

Możesz użyć breakoświadczenia:

let vegetable = "red pepper"
var vegetableComment: String = "Nothing"
switch vegetable {
case "cucumber", "watercress":
    break // does nothing
case let x where x.hasSuffix("pepper"):
    vegetableComment = "Is it a spicy \(x)?"
default:
    vegetableComment = "Everything tastes good in soup."
}

Przykład zmodyfikowany na podstawie dokumentacji

Firo
źródło
3

Poniżej znajduje się jedna opcja dla instrukcji zerowej, ale może nie jest to dobre rozwiązanie. Nie mogę znaleźć instrukcji takiej jak Python Pass

{}() 

w przypadku przełącznika, przerwa jest lepszym wyborem.

break
lbsweek
źródło
0

Najczystszym rozwiązaniem, jakie znalazłem, jest po prostu włączenie ostatniego oświadczenia w przypadku przełącznika jako domyślnego. Pozwala to uniknąć konieczności dodawania breaklub innych niepotrzebnych stwierdzeń, a jednocześnie obejmuje wszystkie możliwe przypadki.

Na przykład:

switch myVar {

case 0:
    myOtherVar = "Red"

case 1:
    myOtherVar = "Blue"

default:
    myOtherVar = "Green"

}
szkocka
źródło
1
Cześć @scottyhardy. Naprawdę nie o to chodzi. Napisałeś odpowiedź na pytanie: „Jak uniknąć konieczności dodawania pustej domyślnej wielkości liter” (lub czegoś podobnego). W twoim przypadku faktycznie robisz coś we wszystkich przypadkach. Ale powiedzmy, że masz przypadek (na przykład numer 2), w którym nie chcesz nic robić, w takim przypadku wracasz do tego samego pytania: co zrobić, gdy w przypadku przełącznika nie chcemy coś zrobić? Krótko mówiąc: użyj przerwy.
Enricoza
0

Oprócz breakwspomnianych w innych odpowiedziach, widziałem również ()używane jako oświadczenie o braku działania:

switch 0 == 1 {
case true:
    break
case false:
    ()
}

Użyj, ()jeśli uznasz to za breakmylące lub chcesz zaoszczędzić 3 znaki.

pkamb
źródło