Can I declare variables inside an Objective-C switch statement?
I don't have a suitable Objective-C compiler on hand, but as long as the C constructs are identical:
switch { … }
gives you one block-level scope, not one for each case
. Declaring a variable anywhere other than the beginning of the scope is illegal, and inside a switch
is especially dangerous because its initialization may be jumped over.
Do either of the following resolve the issue?
NSString *viewDataKey;switch (cellNumber) { case 1: viewDataKey = @"Name"; …}switch (cellNumber) { case 1: { NSString *viewDataKey = @"Name"; … } …}
You can't declare a variable at the beginning of a case statement. Make a test case that just consists of that and you'll get the same error.
It doesn't have to do with variables being declared in the middle of a block — even adopting a standard that allows that won't make GCC accept a declaration at the beginning of a case statement. It appears that GCC views the case label as part of the line and thus won't allow a declaration there.
A simple workaround is just to put a semicolon at the beginning of the case so the declaration is not at the start.
In C you only can declare variables at the begining of a block before any non-declare statements.
{ /* you can declare variables here */ /* block statements */ /* You can't declare variables here */}
In C++ you can declare variables any where you need them.