问题
Cut to the chase I have recreated my problem as it is fairly self explanatory.
this complies without error:
switch (n) {
case 1:
NSLog(@"");
NSString *aStr;
break;
default:
break;
}
this compiles with error and it's only missing the NSLog():
switch (n) {
case 1:
NSString *aStr;
break;
default:
break;
}
it throws an error at compile "Expected expression before 'NSString'"
Am I missing something here?
回答1:
In normal C you'd have to enclose this in brackets in both cases. I suspect this may fix your problem:
case 1:
{
NSLog(@"");
NSString *aStr;
break;
}
See this SO question for more info.
Another way to get around this problem is to put a statement between the case label and the first declaration as you've done in your working example above. See the comments and Quinn Taylor's answer for more info.
回答2:
You can't declare a variable as the first statement in a case
without brackets, and in many other contexts in C-based languages. See Declaring variables inside a switch statement for details.
回答3:
case 0: {
Loading my nib file;
break;
}
case 1: {
Loading another nib file;
break;
}
Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example:
来源:https://stackoverflow.com/questions/2036819/compile-error-with-switch-expected-expression-before