Swift 将默认情况与其他情况合并
例如,给定C#中的以下枚举和一个开关/大小写,以根据文本框的状态返回文本框的边框颜色Swift 将默认情况与其他情况合并,swift,enums,Swift,Enums,例如,给定C#中的以下枚举和一个开关/大小写,以根据文本框的状态返回文本框的边框颜色 enum TextboxState { Default, Error } switch(foo) { default: case TextboxState.Default: return Color.Black; case TextboxState.Error: return Color.Red; } 因此,基本上我定义了一个真实的,而不仅仅是按照惯例的默认状态,即TextboxState
enum TextboxState {
Default,
Error
}
switch(foo) {
default:
case TextboxState.Default: return Color.Black;
case TextboxState.Error: return Color.Red;
}
因此,基本上我定义了一个真实的,而不仅仅是按照惯例的默认状态,即TextboxState.default
,方法是添加default:
大小写。我只是想这样做,以防止将来在向枚举添加新值时发生破坏性的更改
根据Swift手册,这是不可能的:
“如果不适合在所有可能的情况下提供开关箱
值,则可以定义默认的“全面覆盖”情况以覆盖任何值
未明确解决的。此“包罗万象”案例由
关键字default和必须始终最后出现
这一段很清楚,所以我假设我上面的模式不适用于Swift,或者我遗漏了什么?是否有其他方法来存档上述代码?从
开关中删除默认值:
行。即使有一天您向enum添加了额外的案例,如果您没有向每个使用enum的开关添加相应的案例,Swift编译器也会抱怨。仅供参考,您不需要在开关中的大小写
值之前指定TextboxState.
,因为编译器知道foo
是TextboxState
。由此产生的代码将是:
switch(foo) {
case .Default: return Color.Black;
case .Error: return Color.Red;
}
不过,为了保持一致性,我将.Error
案例放在Default
案例之前。您可以使用fallthrough
来做到这一点,方法是将共享行为移动到Default
案例中,并在希望发生共享行为的所有案例中使用fallthrough
例如,如果这是您的枚举(添加了第三个案例以显示它可以处理多个直通):
您可以按如下方式格式化开关
语句:
switch(foo) {
case TextboxState.Error:
return UIColor.redColor()
case TextboxState.Default:
fallthrough
case TextboxState.SomethingElse:
fallthrough
default:
return UIColor.blackColor()
}
每个fallthrough
都会将执行点移动到下一个案例,直到默认案例。为供参考,该fallthrough记录在此处的开关部分下:
switch(foo) {
case TextboxState.Error:
return UIColor.redColor()
case TextboxState.Default:
fallthrough
case TextboxState.SomethingElse:
fallthrough
default:
return UIColor.blackColor()
}