Swift的详尽切换语句的Noop


88

Swift需要详尽的switch语句,并且每种情况都有可执行代码。

“ switch”中的“ case”标签应至少包含一个可执行语句

是否有人愿意以一种好的方式来处理您不想实际做任何事情的情况?我可以在其中放一个println(),但这感觉很脏。


Answers:


150

根据这本书,您需要在break此处使用:

每个案例的范围不能为空。因此,您必须在每个案例标签的冒号(:)之后至少包含一个语句。break如果您不想在匹配大小写的主体中执行任何代码,请使用单个语句。


8
噢,斯威夫特再次打破了最小惊奇法则:)
Sulthan

10
@Jiaaro需要break表明没有分支break可能会崩溃。
RnMss 2014年

4
也很简单()。尽管如此,我还是更喜欢break它,因为它使事情变得更加清晰。使用关键字fallthroug来插入语句。
cLar 2014年

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语句的一个选项,但可能不是一个好的解决方案。我找不到像python pass这样的语句

{}() 

对于开关盒,断路是更好的选择。

break

0

我发现的最干净的解决方案是,将switch案例中的最后一条语句作为默认值包含在内。这样就避免了添加break或其他不必要的语句的需要,同时仍然涵盖了所有可能的情况。

例如:

switch myVar {

case 0:
    myOtherVar = "Red"

case 1:
    myOtherVar = "Blue"

default:
    myOtherVar = "Green"

}

1
嗨@scottyhardy。这实际上不是问题的重点。您为以下问题写了答案:“如何避免添加空的默认案例”(或类似内容)。就您而言,您实际上在所有情况下都在做某事。但是,假设您有一个案例(例如数字2),您不想做任何事情,那么在这种情况下,您会回到同一个问题:在我们不希望的情况下该怎么办?做任何事?长话短说:使用中断。
恩里科萨

0

除了break在其他答案中提到的以外,我还看到()它用作无操作语句:

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

使用(),如果你发现break混淆或要保存3个字符。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.