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.barbaz

编译器认为不需要默认值,因为 enum 的每一种可能性都得到了测试。

这可能是因为 type 是一个包含 3 种情况的枚举,编译器知道 switch 语句是详尽无遗的,因此您不需要 default 语句来处理所有可能的情况.

我认为此警告违反了 open-closed principle。当您稍后添加一个枚举值时,默认值将丢失,您无法预测您的代码将做什么。所以你也必须改变这个地方。无论如何,使用 switch() 完全违反了这个原则。