Noop für Swifts ausführliche Schalteranweisungen


87

Swift erfordert umfassende switch-Anweisungen und dass jeder Fall ausführbaren Code enthält. Hat sich jemand für einen guten Weg entschieden, um mit den Fällen umzugehen, in denen Sie eigentlich nichts tun möchten? Ich kann dort ein println () einfügen, aber das fühlt sich schmutzig an.


4
Könntest du nicht einfach eine Pause machen?
Firo

Antworten:


148

Laut dem Buch müssen Sie breakdort verwenden:

Der Umfang eines jeden Falles kann nicht leer sein. Daher müssen Sie mindestens eine Anweisung nach dem Doppelpunkt (:) jedes Falletiketts einfügen. Verwenden Sie eine einzelne breakAnweisung, wenn Sie keinen Code im Hauptteil eines übereinstimmenden Falls ausführen möchten.


8
Oh, wieder bricht Swift das Gesetz der minimalen Überraschung :)
Sulthan

@ Sulthan macht nach ein wenig Überlegung breakSinn. Es bietet eine Möglichkeit, einen Fall vorzeitig zu default:
beenden

9
@Jiaaro Die Notwendigkeit für breakzeigt an, dass die Zweige ohne breakdurchfallen könnten.
RnMss

4
Ein einfacher ()Wokrs auch. Trotzdem bevorzuge ich, breakda es die Dinge klarer macht. Verwenden Sie das Schlüsselwort fallthroug, um durch Anweisungen zu fallen.
cLar

1
Dies ist ziemlich ärgerlich, wenn Sie die einzige Zeile, die in diesem default:Fall vorhanden ist , kurz auskommentieren möchten . Das scheint keine gute Sache zu sein. Ich stimme auch zu, dass es darauf hindeutet, dass c durch sein Verhalten fällt, was Swift nicht tut (schön zu wissen, dass es durchfallen kann).
Benjohn

12

Sie können einfach eine Pause verwenden:

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

Beispiel aus den Dokumenten geändert


3

Unten finden Sie eine Option für die Null-Anweisung, aber möglicherweise keine gute Lösung. Ich kann keine Aussage wie Python Pass finden

{}() 

Für Schaltergehäuse ist Pause die bessere Wahl.

break

0

Die sauberste Lösung, die ich gefunden habe, besteht darin, einfach Ihre letzte Anweisung als Standard in den Switch-Fall aufzunehmen. Dies vermeidet die Notwendigkeit, breakunnötige Anweisungen hinzuzufügen oder andere, während alle möglichen Fälle abgedeckt werden.

Beispielsweise:

switch myVar {

case 0:
    myOtherVar = "Red"

case 1:
    myOtherVar = "Blue"

default:
    myOtherVar = "Green"

}

Hallo @scottyhardy. Dies ist wirklich nicht der Punkt der Frage. Sie haben die Antwort auf die Frage geschrieben: "So vermeiden Sie, dass Sie einen leeren Standardfall hinzufügen müssen" (oder etwas in dieser Richtung). In Ihrem Fall tun Sie in allen Fällen tatsächlich etwas. Angenommen, Sie haben einen Fall (wie zum Beispiel die Nummer 2), in dem Sie nichts tun möchten. In diesem Fall kommen Sie auf dieselbe Frage zurück: Was tun, wenn wir in einem Switch-Fall nichts möchten? etwas tun? Lange Rede, kurzer Sinn: Verwenden Sie Pause.
Enricoza
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.