为什么我不能在 switch 语句中使用 NSInteger?
为什么这不起作用:
NSInteger sectionLocation = 0;
NSInteger sectionTitles = 1;
NSInteger sectionNotifications = 2;
switch (section) {
case sectionLocation:
//
break;
case sectionTitles:
//
break;
case sectionNotifications:
//
break;
default:
//
}
我收到此编译错误:
错误:大小写标签未简化为整数常量
不可能像这样使用 NSInteger 吗?如果是这样,是否有另一种方法可以在 switch 语句中使用变量作为 case ? sectionLocation
等具有变量值。
Why doesn't this work:
NSInteger sectionLocation = 0;
NSInteger sectionTitles = 1;
NSInteger sectionNotifications = 2;
switch (section) {
case sectionLocation:
//
break;
case sectionTitles:
//
break;
case sectionNotifications:
//
break;
default:
//
}
I get this compile error:
error: case label does not reduce to an integer constant
Is it not possible to use NSInteger's like this? If so, is there another way to use variables as cases in a switch statement? sectionLocation
etc. have variable values.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
问题不在于标量类型,而在于当它们是这样的变量时,案例标签可能会改变值。
出于所有意图和目的,编译器将 switch 语句编译为一组 goto。标签不能是可变的。
使用枚举类型或#defines。
The problem isn't the scalar type, but that the case labels may change value when they are variables like that.
For all intents and purposes, the compiler compiles a switch statement as a set of gotos. The labels can't be variable.
Use an enumerated type or #defines.
原因是编译器通常希望使用开关值作为该表的键来创建一个“跳转表”,并且只有在切换简单的整数值时才能做到这一点。这应该有效:
The reason is that the compiler will often want to create a 'jump table' using the switch value as the key into that table and it can only do that if it's switching on a simple integer value. This should work instead:
这里的问题是你正在使用变量。只能在 switch 语句中使用常量。
执行类似
or 的
操作,您将能够在 switch 语句中使用 valuea 等。
The problem here is you are using variables. You can only use constants in switch statements.
Do something like
or
And you will be able to use valuea and so forth in your switch statement.
如果你的 case 值在运行时确实发生了变化,那就是 if...else if...else if 构造的用途。
If your case values truly change at runtime, that's what the if...else if...else if construct is there for.
或者只是这样做
or just do this