Swiftの徹底的なSwitchステートメントのNoop


87

Swiftは徹底的なswitchステートメントを必要とし、それぞれのケースに実行可能なコードがあることを示しています。

「スイッチ」の「ケース」ラベルには、少なくとも1つの実行可能ステートメントが必要です

あなたが実際に何もしたくない場合を処理する良い方法に誰かが決着しましたか?私はそこにprintln()を置くことができますが、それは汚い感じがします。


回答:


149

よるとこの本、あなたが使用する必要がbreakあり:

各ケースのスコープを空にすることはできません。そのため、各ケースラベルのコロン(:)の後に少なくとも1つのステートメントを含める必要があります。break一致したケースの本文でコードを実行する予定がない場合は、単一のステートメントを使用します。


8
ああ、再びスウィフトは最小の驚きの法則を破る:)
スルタン

10
@Jiaaroの必要性breakは、分岐のないものbreakが抜け落ちることを示します。
RnMss 2014

4
シンプルな()中華料理も。それにもかかわらず、私breakはそれが物事をより明確にするので好む。キーワードfallthrougを使用してステートメントを省略します。
cLar '25

1
default:ケース内の唯一の行を簡単にコメントアウトしたい場合、これは非常に迷惑です。それは良いことのようには思えません。また、Cのフォールスルー動作を示唆するものであることにも同意します。これは、Swiftが行う動作ではありません(ただし、スルースルーする可能性があることを知っておくと便利です)。
ベンジョン

1
そして私は...ここに来てちょうど休憩を早期に外側のループを終了するつもりではなかったことを確認しました
JulianSymes

12

次のbreakステートメントを使用できます。

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

ドキュメントから変更された例


3

以下はnullステートメントのオプションの1つですが、良い解決策ではないかもしれません。python passのようなステートメントが見つかりません

{}() 

スイッチケースの場合は、ブレークの方が適しています。

break

0

break他の回答で言及されていることに加えて、私は()何もしないステートメントとして使用されているのを見てきました:

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

()わかりbreakにくい場合や3文字を節約したい場合に使用します。


-1

私が見つけた最もクリーンなソリューションは、デフォルトとして最後のステートメントをスイッチケースに含めることです。これにより、break可能なすべてのケースをカバーしながら、追加やその他の不要なステートメントを行う必要がなくなります。

例えば:

switch myVar {

case 0:
    myOtherVar = "Red"

case 1:
    myOtherVar = "Blue"

default:
    myOtherVar = "Green"

}

1
こんにちは@scottyhardy。これは本当に問題のポイントではありません。「空のデフォルトケースを追加する必要がないようにする方法」(またはそれらの行に沿った何か)の質問に対する回答を書きました。あなたの場合、あなたは実際にすべてのケースで何かをしています。しかし、何もしたくない場合(たとえば、2など)があり、その場合、同じ質問に戻ります。スイッチケースの場合はどうすればよいかを考えません。何をするにも?要するに、休憩を使用してください。
Enricoza
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.