Noop per le esaurienti dichiarazioni di cambio di Swift


88

Swift richiede istruzioni switch esaustive e che ogni caso abbia un codice eseguibile.

L'etichetta 'case' in un 'switch' dovrebbe avere almeno un'istruzione eseguibile

Qualcuno ha stabilito un buon modo per gestire i casi in cui non vuoi fare davvero nulla? Posso mettere un println () lì dentro, ma sembra sporco.


Risposte:


150

Secondo il libro , devi usare breaklì:

L'ambito di ogni caso non può essere vuoto. Di conseguenza, è necessario includere almeno un'istruzione dopo i due punti (:) di ciascuna etichetta case. Utilizza una singola breakistruzione se non intendi eseguire alcun codice nel corpo di un caso corrispondente.


8
Oh, ancora una volta Swift infrange la legge della sorpresa minima :)
Sulthan

10
@ Jiaaro La necessità di breakindica che i rami senza breakpotrebbero cadere.
RnMss

4
Anche un semplice ()wokrs. Tuttavia preferisco breakin quanto rende le cose più chiare. Usa la parola chiave fallthrougper cadere attraverso le affermazioni.
cLar

1
Questo è abbastanza fastidioso quando vuoi commentare brevemente l'unica riga che è nel default:caso. Non sembra una buona cosa. Sono anche d'accordo sul fatto che sia indicativo della caduta di c attraverso il comportamento, che non è ciò che fa Swift (bello sapere che può fallire).
Benjohn

1
E sono dovuto venire qui solo per assicurarmi che la pausa non
terminasse

12

Puoi usare una breakdichiarazione:

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

Esempio modificato dalla documentazione


3

Di seguito è riportata un'opzione per l'istruzione nulla, ma forse non è una buona soluzione. Non riesco a trovare un'istruzione come Python pass

{}() 

per il caso dell'interruttore, la rottura è la scelta migliore.

break

0

La soluzione più pulita che ho trovato è semplicemente includere la tua ultima dichiarazione nel caso dello switch come impostazione predefinita. Ciò evita la necessità di aggiungere breako altre dichiarazioni non necessarie pur coprendo tutti i casi possibili.

Per esempio:

switch myVar {

case 0:
    myOtherVar = "Red"

case 1:
    myOtherVar = "Blue"

default:
    myOtherVar = "Green"

}

1
Ciao @scottyhardy. Questo non è davvero il punto della domanda. Hai scritto la risposta alla domanda: "Come evitare di dover aggiungere un caso predefinito vuoto" (o qualcosa del genere). Nel tuo caso stai effettivamente facendo qualcosa in tutti i casi. Ma diciamo che hai un caso (come il numero 2 per esempio) in cui non vuoi fare nulla, allora in quel caso torni alla stessa domanda: cosa fare quando in un caso di scambio non vogliamo fare qualsiasi cosa? Per farla breve: usa break.
Enricoza

0

Oltre a quanto breakmenzionato in altre risposte, l'ho visto anche ()usato come dichiarazione di divieto di intervento:

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

Usalo ()se trovi breakconfuso o vuoi salvare 3 caratteri.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.