给出C#中的以下枚举和switch / case,例如根据其状态返回文本框的边框颜色.
enum TextBoxState { Default,Error } switch(foo) { default: case TextBoxState.Default: return Color.Black; case TextBoxState.Error: return Color.Red; }
所以基本上我通过添加default:case来定义一个真实的而不仅仅是通过约定默认状态aka TextBoxState.Default.我只是想这样做,以防止在枚举中添加新值时将来的更改.
根据Swift的书,这是不可能的:
“If it is not appropriate to provide a switch case for every possible
value,you can define a default catch-all case to cover any values
that are not addressed explicitly. This catch-all case is indicated by
the keyword default,and must always appear last.”
该段落很清楚,所以我认为上面的模式不适用于Swift或者我错过了什么?有没有其他方式来存档像上面的代码?
您可以使用fallthrough来执行此操作,方法是在默认情况下移动共享行为,并在您希望发生共享行为的所有情况下使用fallthrough.
例如,如果这是你的枚举(添加了第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() }
每次尝试都将执行点移动到下一个案例,直到默认情况.