Ошибка компиляции с помощью: switch, "ожидаемое выражение перед"

Отрежьте преследование, я воссоздал свою проблему, поскольку она довольно понятна.

это выполняется без ошибок:

switch (n) {
    case 1:
        NSLog(@"");
        NSString *aStr;
        break;
    default:
        break;
    }

это компилируется с ошибкой, и он пропускает только NSLog():

switch (n) {
    case 1:
        NSString *aStr;
        break;
    default:
        break;
    }

он выдает ошибку при компиляции "Ожидаемое выражение перед" NSString "

Я что-то пропустил?

Ответ 1

В обычном C вам придется заключить это в скобки в обоих случаях. Я подозреваю, что это может решить вашу проблему:

case 1:
{
    NSLog(@"");
    NSString *aStr;
    break;
}

См. этот вопрос SO для получения дополнительной информации.

Другой способ обойти эту проблему - поставить инструкцию между меткой case и первым объявлением, как это было сделано в приведенном выше примере работы. См. Комментарии и ответ Куинн Тейлор для получения дополнительной информации.

Ответ 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: