2015-04-22 238 views
0

这里使用枚举和开关的情况下组合是我的代码:斯威夫特

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 


     } 
    } 
} 

Eror LOG:在一个“开关” “案例”标签应至少有一个可执行语句

如何在Swift中使用enum开关箱?

+0

您有没有看过“相关问题”? –

+0

@MartinR,对不起,我认为它在Xcode 6.3中的新错误 – Guru

回答

1

有一个错误,因为你在:之后以及在下一个case之前没有任何东西。要解决此问题,您可以:

1.添加一些代码来执行某些操作。

2.如果您想移动到下一个,请添加fallthrough。这可能是你想要做的。但是,在Swift中,switch声明默认情况下不会落入下一个案例,它们是break

3.break停止switch声明。

2

这是抱怨,你需要在匹配case后真正做些事情。否则,没有太多点匹配它,并有可能是一个错字。

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

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

注意,有没有隐含的下跌通过斯威夫特的switch语句。你需要给一个明确的:

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

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

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