为什么这不起作用:
NSInteger sectionLocation = 0;
NSInteger sectionTitles = 1;
NSInteger sectionNotifications = 2;
switch (section) {
case sectionLocation:
//
break;
case sectionTitles:
//
break;
case sectionNotifications:
//
break;
default:
//
}
我收到了这个编译错误:
错误:case标签不会减少为整数常量
是不是可以像这样使用NSInteger?如果是这样,是否有另一种方法在switch语句中使用变量作为案例? sectionLocation
等具有变量值。
答案 0 :(得分:11)
问题不是标量类型,而是案例标签在它们是类似变量时可能会改变值。
对于所有意图和目的,编译器将switch语句编译为一组gotos。标签不可变。
使用枚举类型或#defines。
答案 1 :(得分:4)
原因是编译器通常希望使用switch值作为该表的键来创建“跳转表”,并且只有在切换一个简单的整数值时它才能这样做。这应该工作:
#define sectionLocation 0
#define sectionTitles 1
#define sectionNotifications 2
int intSection = section;
switch (intSection) {
case sectionLocation:
//
break;
case sectionTitles:
//
break;
case sectionNotifications:
//
break;
default:
//
}
答案 2 :(得分:2)
这里的问题是你正在使用变量。您只能在switch语句中使用常量。
执行类似
的操作#define SOME_VALUE 1
或
enum Values {
valuea = 1,
valueb = 2,
...
}
您可以在switch语句中使用valuea等。
答案 3 :(得分:1)
如果您的案例值在运行时真正发生了变化,那就是if ... else if ... else if construct for。
答案 4 :(得分:-2)
或只是这样做
switch((int)secion)