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.


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.


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


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

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"

}

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.