【问题标题】:Swift Switch case: Default will never be executed warningSwift Switch 案例:默认永远不会被执行警告
【发布时间】:2015-07-05 23:25:11
【问题描述】:

在带有 Swift 2 代码的 Xcode 7b2 上,我有以下内容:

在切换情况下,编译器会返回以下警告:

Default will never be executed

代码:

switch(type) {
  case .foo:
    return "foo"
  case .bar:
    return "bar"
  case .baz:
    return "baz"
  default:
    return "?"
}

为什么会有警告?

【问题讨论】:

    标签: switch-statement swift2


    【解决方案1】:

    我才明白为什么:
    我“打开”的对象是 enum,而我的 enum 只有 3 个条目:.foo.barbaz

    编译器认为不需要默认值,因为enum 的所有可能性都经过测试。

    【讨论】:

    • 您能否将您的答案标记为正确,以便所有人都可以看到您的问题已得到回答。
    • 完美解决方案。
    【解决方案2】:

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

    【讨论】:

    • 只要您添加另一个值,您的代码就会停止编译。编译器会在考虑案例的每个 switch 语句处引发错误。这条评论有点晚了,但希望仍然有用。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 2016-03-10
      • 2019-12-07
      • 2014-08-14
      • 2023-01-04
      • 1970-01-01
      • 2021-08-19
      相关资源
      最近更新 更多