Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 将默认情况与其他情况合并_Swift_Enums - Fatal编程技术网

Swift 将默认情况与其他情况合并

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

例如,给定C#中的以下枚举和一个开关/大小写,以根据文本框的状态返回文本框的边框颜色

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()
}