I have defined an enum in a header file of a class :
typedef enum{
RED = 0,
BLUE,
Green
} Colors;
- (void) switchTest:(Colors)testColor;
and in the implementation file I have :
- (void) switchTest:(Colors)testColor{
if(testColor == RED){
NSLog(@"Red selected");
}
switch(testColor){
case RED:
NSLog(@"Red selected again !");
break;
default:
NSLog(@"default selected");
break;
}
}
My code compiles correctly without warrnings. When calling the switchTest method with RED, the output is : "Red selected"
but once the first line of the switch runs, the application quits unexpectedly and without warrnings/errors.
I don't mind using if/else syntax but I would like to understand my mistake.
An Enum keyword can be used with if statement, switch statement, iteration, etc. enum constants are public, static, and final by default. enum constants are accessed using dot syntax. An enum class can have attributes and methods, in addition to constants.
First, the switch case uses the name you declared for your variable. The enum holds the logic, and your variable allows you to access the logic. Using the same name in your switch case allows you to access the variable. Think of it like a locked room.
Example of Using Enum in Switch Case Statement We will then use the switch case statements to switch between the direction elements and print the output based on the value of the variable for the enum directions.
Works fine for me:
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;
}
In my case, the problem was that I defined the variable:
Colors *testColor; //bad
Instead of:
Colors testColor; //right
Hope it helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With