Сокращение к преследованию, я воссоздал свою проблему, поскольку это справедливо сам объяснительное.
это соответствует без ошибки:
switch (n) {
case 1:
NSLog(@"");
NSString *aStr;
break;
default:
break;
}
это компилирует с ошибкой, и она только пропускает NSLog ():
switch (n) {
case 1:
NSString *aStr;
break;
default:
break;
}
это бросает ошибку в компиляцию, "Ожидал выражение перед 'NSString'"
Я пропускаю что-то здесь?
В обычном C, вы должны приложить это в скобках в обоих случаях. Я подозреваю, что это может исправить вашу проблему:
case 1:
{
NSLog(@"");
NSString *aStr;
break;
}
см. Это настолько вопрос для получения дополнительной информации.
Еще один способ обойти эту проблему - поставить оператор между этикеткой Case и первой декларацией, как вы сделали в своем рабочем примере выше. Смотрите комментарии и ответы Куинна Тейлора для получения дополнительной информации.
Вы не можете объявить переменную как первый оператора в корпусе
без скобок, а во многих других контекстах в языках на основе C. См. Объявление переменных внутри оператора выключателя для деталей.