【问题标题】:Using enum and switch case combination in Swift [duplicate]在 Swift 中使用枚举和 switch case 组合[重复]
【发布时间】:2015-04-22 14:55:02
【问题描述】:

这是我的代码:

enum GameScreen
{
    case kSceneFlashScreen
    case kSceneMainMenu
    case kSceneGameScreen
    case kSceneStoreScreen
    case kSceneGameOver
}

class YSGameManager: NSObject {

    func replaceGameScene(inScreen: GameScreen)
    {
        switch inScreen
        {
            case GameScreen.kSceneGameScreen: //Error for here
            case GameScreen.kSceneMainMenu : //here also error


        }
    }
}

错误日志:'switch' 中的'case' 标签应该至少有一个可执行语句

如何在 Swift 的 switch case 中使用枚举?

【问题讨论】:

  • 你看“相关问题”了吗?
  • @MartinR,对不起,我认为它在 Xcode 6.3 中出现了新错误

标签: iphone xcode swift


【解决方案1】:

出现错误,因为在 : 之后和下一个 case 之前没有任何内容。要解决这个问题,您可以:

1.添加一些代码来做某事。

2. 如果您想移动到下一个case,请添加fallthrough。这可能是你试图做的。但是,在 Swift 中,switch 语句默认情况下不会落入下一种情况,它们是break

3. 添加break 以停止switch 语句。

【讨论】:

  • 这对我帮助很大,替代方案是丑陋的 if 语句,我讨厌 if 语句?
【解决方案2】:

它抱怨你需要在匹配 case 之后实际做一些事情。否则,匹配它的意义不大,很可能是一个错字。

除了覆盖之外,即如果你不想要default,你想命名每个可能的枚举,即使你不想为其中一些做任何事情。在这种情况下,坚持break

switch inScreen {
case kSceneGameScreen:
    break
// etc.
}

注意,Swift 的 switch 语句中没有隐含的失败。您需要明确给出一个:

switch inScreen {
case kSceneGameScreen:
    // do a game-screen-specific thing
    fallthrough   // then
case kSceneMainMenu:
    // do a thing for both
    // kSceneGameScreen and kSceneMainMenu
// etc.
}

但是如果你只是想匹配两种可能性,你不需要使用fall through,你可以将它们与,结合起来:

switch inScreen {
case kSceneGameScreen, kSceneMainMenu:
    // do a thing for both
    // kSceneGameScreen and kSceneMainMenu
// etc.
}

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 1970-01-01
    • 2012-04-30
    • 2021-12-17
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    相关资源
    最近更新 更多