将默认情况与其他情况相结合

MBu*_*lli 7 enums swift

给出C#中的以下枚举和switch/case,以根据其状态返回文本框的边框颜色.

enum TextboxState {
 Default,
 Error
}

switch(foo) {
 default:
 case TextboxState.Default:  return Color.Black;
 case TextboxState.Error:    return Color.Red;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我定义了一个真实的,而不仅仅是通过约定默认状态,也就是TextboxState.Default通过添加default:案例 我只是想这样做,以防止在枚举中添加新值时将来的更改.

根据Swift的书,这是不可能的:

"如果为每个可能的值提供一个switch case是不合适的,你可以定义一个默认的catch-all case来覆盖任何未明确解决的值.这个包罗万象的案例由关键字default指示,并且必须始终显示在最后."

这一段很清楚,所以我认为上面的模式不适用于Swift或者我错过了什么?有没有其他方式来存档像上面的代码?

Ant*_*nio 11

您可以fallthrough通过移动案例中的共享行为来default使用,并fallthrough在所有情况下使用您希望发生共享行为的情况.

例如,如果这是你的枚举(添加了第3个案例,表明它可以处理多个掉落):

enum TextboxState {
    case Default
    case Error
    case SomethingElse
}
Run Code Online (Sandbox Code Playgroud)

您可以switch按如下方式格式化语句:

switch(foo) {
case TextboxState.Error:
    return UIColor.redColor()

case TextboxState.Default:
    fallthrough

case TextboxState.SomethingElse:
    fallthrough

default: 
    return UIColor.blackColor()
}
Run Code Online (Sandbox Code Playgroud)

每个都fallthrough将执行点移动到下一个案例,直到default案例.