给出C#中的以下枚举和switch / case,以根据其状态返回文本框的边框颜色。
enum TextboxState {
Default,
Error
}
switch(foo) {
default:
case TextboxState.Default: return Color.Black;
case TextboxState.Error: return Color.Red;
}
所以基本上我通过添加TextboxState.Default
案例来定义一个真实的,而不仅仅是按惯例默认状态default:
。我只是想这样做,以防止在枚举中添加新值时将来的更改。
根据Swift的书,这是不可能的:
“如果不适合为每一种可能的情况提供开关盒 值,您可以定义一个默认的catch-all案例来覆盖任何值 未明确解决的问题。这个包罗万象的案例表示 关键字默认值,必须始终显示在最后。“
该段落非常清楚,所以我认为上面的模式不适用于Swift或者我错过了什么?有没有其他方式来存档像上面的代码?
答案 0 :(得分:11)
您可以使用fallthrough
来执行此操作,方法是移动default
案例中的共享行为,并在您希望发生共享行为的所有情况下使用fallthrough
。< / p>
例如,如果这是你的枚举(添加了第3个案例,表明它可以处理多个掉落):
enum TextboxState {
case Default
case Error
case SomethingElse
}
您可以按如下方式格式化switch
语句:
switch(foo) {
case TextboxState.Error:
return UIColor.redColor()
case TextboxState.Default:
fallthrough
case TextboxState.SomethingElse:
fallthrough
default:
return UIColor.blackColor()
}
每个fallthrough
将执行点移至下一个案例,直至default
案例。
答案 1 :(得分:1)
从default:
删除switch
行。即使有一天你的枚举添加了其他案例,如果你没有向使用枚举的每个switch
添加相应的案例,Swift编译器会抱怨。而且,仅供参考,您无需在TextboxState.
中的case
值之前指定switch
,因为编译器知道foo
是TextboxState
。结果代码为:
switch(foo) {
case .Default: return Color.Black;
case .Error: return Color.Red;
}
但是,为了保持一致性,我将.Error
案例放在.Default
之前。