gpt4 book ai didi

swift - 当一个 Switch 案例与其他案例相交时避免重复代码

转载 作者:行者123 更新时间:2023-11-30 10:31:16 26 4
gpt4 key购买 nike

我需要编写一个代码块,其中如果变量的值为选项 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语句,而不执行//更多代码语句。

这也不起作用:

case .optionA, .both:
//code
fallthrough
case .optionB:
//more code

因为当 value.optionA 时,这将导致 .optionB 语句执行。

当然,问这个问题的全部目的是避免做类似的事情:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com