Swift Switch case: 默认永远不会执行警告
Swift Switch case: Default will never be executed warning
在 Xcode 7b2 上使用 Swift 2 代码,我有以下内容:
在 switch 情况下,编译器 returns 发出以下警告:
Default will never be executed
代码:
switch(type) {
case .foo:
return "foo"
case .bar:
return "bar"
case .baz:
return "baz"
default:
return "?"
}
为什么会有警告?
我才明白为什么:
我 "switched" 上的对象是一个 enum
而我的 enum
只有 3 个条目:.foo
、.bar
、baz
。
编译器认为不需要默认值,因为 enum
的每一种可能性都得到了测试。
这可能是因为 type
是一个包含 3 种情况的枚举,编译器知道 switch 语句是详尽无遗的,因此您不需要 default
语句来处理所有可能的情况.
我认为此警告违反了 open-closed principle。当您稍后添加一个枚举值时,默认值将丢失,您无法预测您的代码将做什么。所以你也必须改变这个地方。无论如何,使用 switch() 完全违反了这个原则。
在 Xcode 7b2 上使用 Swift 2 代码,我有以下内容:
在 switch 情况下,编译器 returns 发出以下警告:
Default will never be executed
代码:
switch(type) {
case .foo:
return "foo"
case .bar:
return "bar"
case .baz:
return "baz"
default:
return "?"
}
为什么会有警告?
我才明白为什么:
我 "switched" 上的对象是一个 enum
而我的 enum
只有 3 个条目:.foo
、.bar
、baz
。
编译器认为不需要默认值,因为 enum
的每一种可能性都得到了测试。
这可能是因为 type
是一个包含 3 种情况的枚举,编译器知道 switch 语句是详尽无遗的,因此您不需要 default
语句来处理所有可能的情况.
我认为此警告违反了 open-closed principle。当您稍后添加一个枚举值时,默认值将丢失,您无法预测您的代码将做什么。所以你也必须改变这个地方。无论如何,使用 switch() 完全违反了这个原则。