我在类的头文件中定义了一个枚举:
typedef enum{
RED = 0,
BLUE,
Green
} Colors;
- (void) switchTest:(Colors)testColor;
在实施文件中我有:
- (void) switchTest:(Colors)testColor{
if(testColor == RED){
NSLog(@"Red selected");
}
switch(testColor){
case RED:
NSLog(@"Red selected again !");
break;
default:
NSLog(@"default selected");
break;
}
}
我的代码正确编译而无需更改。 使用RED调用switchTest方法时,输出为: “红色选中”
但是一旦交换机的第一行运行,应用程序就会意外退出并且没有出现任何错误/错误。
我不介意使用if / else语法,但我想了解我的错误。
答案 0 :(得分:12)
对我来说很好:
typedef enum{
RED = 0,
BLUE,
Green
} Colors;
@interface Test : NSObject
- (void) switchTest:(Colors)testColor;
@end
@implementation Test
- (void) switchTest:(Colors)testColor {
if(testColor == RED) {
NSLog(@"Red selected");
}
switch(testColor){
case RED:
NSLog(@"Red selected again !");
break;
default:
NSLog(@"default selected");
break;
}
}
@end
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Test *myTest = [[Test alloc] init];
[myTest switchTest:RED];
[myTest switchTest:RED];
[pool drain];
return 0;
}
答案 1 :(得分:6)
就我而言,问题在于我定义了变量:
Colors *testColor; //bad
而不是:
Colors testColor; //right
希望它有所帮助。
答案 2 :(得分:0)
把我的头发拉成同样的东西。包含枚举的case值的switch语句,根据一些#ifdef块的不同定义。即使您可以使用NSLog罚款“打印”它们,开关内的编译器也无法正确识别案例值。
如果名称被正确识别,它将以未知的蓝绿色显示,如果它不是黑色的话。我的案例值以黑色显示。退出xcode并重启后一切都很好。