我需要编写一个代码块,如果变量的值是选项A,则执行一组语句,如果值是选项B,则执行另一组语句,如果值既是A又是B,则两组语句都执行(不执行任何操作如果它既不是A也不是B)。
我知道使用if/else
这是相对简单的。但是,我想使用switch语句来实现代码安全性(对switch
进行编译器检查是详尽的)和可读性。我正在查看类似的内容,但是它将switch
与if/else
混合以管理控制流。这很丑陋,我想知道是否有人知道更好的方法。
enum myEnum{
case optionA
case optionB
case both
case neither
}
switch value {
case .optionA, .both:
//Executed when value is myEnum.optionA or myEnum.both
if( value == myEnum.both){
fallthrough
}
case .optionB:
//Executed when value is myEnum.optionB or myEnum.both
default:
//covers everything else
}
关于无效的一些注意事项:
你不能有
case .optionA, .both:
//code
case .optionB, .both:
//more code
因为当
value
是.both
时,执行流将在//code
语句执行后退出switch语句,而不执行//more code
语句。这也行不通:
case .optionA, .both:
//code
fallthrough
case .optionB:
//more code
因为这将导致在
.optionB
为value
时执行.optionA
语句。当然,提出这个问题的全部目的是避免做类似的事情:
case .optionA:
//code
case .optionB:
//more code
case .optionB:
//code
//more code
最佳答案
我认为您的要求是不可能的(请参见docs)。枚举的重点是定义独特的情况。您试图定义一个案例,该案例是同一枚举中其他两个案例的组合。
实际上,您可以选择两个不同的选项。如果可以,最好采用这种方式对其进行建模:
enum OptionSelection {
case selected
case notSelected
}
var optionA: OptionSelection?
var optionB: OptionSelection?
但这显然不能提供您想要的解决方案。我只是认为不可能。
关于swift - 当一个Switch案例与其他案例相交时,避免重复代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59167771/