使用enum的iphoneswitch语句

使用enum的iphoneswitch语句,iphone,objective-c,Iphone,Objective C,我在类的头文件中定义了枚举: typedef enum{ RED = 0, BLUE, Green } Colors; - (void) switchTest:(Colors)testColor; 在实施文件中,我有: - (void) switchTest:(Colors)testColor{ if(testColor == RED){ NSLog(@"Red selected"); } switch(testColor){ case R

我在类的头文件中定义了枚举:

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;
   }

}
我的代码编译正确,没有警告。 用红色调用switchTest方法时,输出为: “红色选定”

但一旦交换机的第一行运行,应用程序就会意外退出,并且不会出现警告/错误。

我不介意使用if/else语法,但我想理解我的错误。

对我来说很好:

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;
}

也在扯我的头发。一种switch语句,包含枚举中的大小写值,根据某些#ifdef块的不同定义。即使可以使用NSLog fine“打印”大小写值,编译器也无法正确识别开关中的大小写值


如果一个名称被正确识别,它将以众所周知的蓝绿色显示,如果它不是黑色的。我的案例值以黑色显示。在退出xcode并重新启动之后,一切都很好

在我的例子中,问题是我定义了变量:

Colors *testColor; //bad
而不是:

Colors testColor; //right

希望有帮助。

你能再发一些代码吗?可能是您创建颜色参数并发送switchTest:message的一两行?@Pfitz感谢您的编辑。现在@end上方是否有一个额外的
}
?让人很难跟随和学习。谢谢。您如何将字符串输入转换为相应的枚举值?例如:您从文本输入中接收到@“RED”作为字符串,并希望在不使用一大堆if-else语句的情况下通过switch语句,您将如何将其与NSUINumbers的枚举列表相关联?