我需要编写一个代码块,如果变量的值是选项A,则执行一组语句,如果值是选项B,则执行另一组语句,如果值既是A又是B,则两组语句都执行(不执行任何操作如果它既不是A也不是B)。

我知道使用if/else这是相对简单的。但是,我想使用switch语句来实现代码安全性(对switch进行编译器检查是详尽的)和可读性。我正在查看类似的内容,但是它将switchif/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


因为这将导致在.optionBvalue时执行.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/

10-11 19:06