En fait vous pouvez déclarer des variables à l'intérieur d'un commutateur si vous le faire en fonction de la syntaxe de la langue. Vous obtenez une erreur car "case 0:
" est un label, et en C, il est illégal d'avoir une déclaration comme la première déclaration après l'étiquette de noter que le compilateur s'attend à une expression, comme un appel de méthode, attribution normale, etc. (Bizarre qu'il soit, c'est la règle.)
Lorsque vous mettez le NSLog() tout d'abord, vous éviter cette limitation. Vous pouvez inclure le contenu d'un cas dans accolades { } pour présenter une étude sur la portée de bloc, ou vous pouvez déplacer la déclaration de la variable à l'extérieur de l'interrupteur. Que vous choisissez est une question de préférence personnelle. Juste être conscient qu'une variable déclarée dans accolades { } n'est valable que dans cette étendue, de sorte que n'importe quel autre code qui l'utilise doit également apparaître à l'intérieur de ces accolades.
Edit:
Par ailleurs, cette bizarrerie n'est pas aussi rare qu'on pourrait le croire. En C et en Java, il est également illégal d'utiliser une déclaration de variable locale comme seule instruction (qui signifie "pas entouré par des accolades) dans une pour, tandis que, ou de faire une boucle, ou même dans si et d'autre des clauses. (En fait, c'est couvert dans le jeu de puzzle n ° 55 de Java"casse-têtes", que je recommande fortement.) Je pense que généralement nous n'écris pas ces erreurs pour commencer parce qu'il fait peu de sens pour déclarer une variable comme la seule instruction dans de tels contextes. Avec le commutateur / cas des constructions, que certaines personnes omettre les accolades depuis le saut de déclaration, la déclaration critique pour le contrôle de flux.
Pour voir le compilateur jeter correspond, copiez cette horrible, inutile extrait de code dans votre (Objectif)du code C:
if (1)
int i;
else
int i;
for (int answer = 1; answer <= 42; answer ++)
int i;
while (1)
int i;
do
int i;
while (1);
Encore une autre raison de toujours utiliser des accolades { } pour délimiter le corps de telles constructions. :-)