Могу ли я объявлять переменные внутри оператора Objective-C?

Я думаю, что я ослеп, потому что я не могу понять, где синтаксическая ошибка в этом коде:

if( cell == nil ) { titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier ] autorelease ]; switch( cellNumber ) { case 1: NSString *viewDataKey = @"Name"; etc... 

Когда я пытаюсь скомпилировать его, я получаю ошибку: синтаксическая ошибка перед токеном ‘*’ в последней строке.

Извините за такой базовый вопрос, но чего мне не хватает?

    У меня нет подходящего компилятора Objective-C под рукой, но пока конструкторы C идентичны:

    switch { … } дает вам одну область уровня блока, а не по одному для каждого case . Объявление переменной в любом месте, кроме начала области, является незаконным, а внутри switch особенно опасно, потому что его инициализация может быть перегнута.

    Выполните одно из следующих действий:

     NSString *viewDataKey; switch (cellNumber) { case 1: viewDataKey = @"Name"; … } switch (cellNumber) { case 1: { NSString *viewDataKey = @"Name"; … } … } 

    Вы не можете объявить переменную в начале оператора case. Сделайте тестовый пример, который состоит из этого, и вы получите ту же ошибку.

    Это не связано с объявлением переменных в середине блока – даже при принятии стандарта, который допускает, что GCC не примет декларацию в начале оператора case. Похоже, что GCC рассматривает метку case как часть строки и, таким образом, не позволяет там декларировать.

    Простым обходным решением является просто положить точку с запятой в начале дела, чтобы объявление не начиналось.

    В C вы можете объявлять переменные в начале блока перед любыми заявлениями, не объявляемыми.

     { /* you can declare variables here */ /* block statements */ /* You can't declare variables here */ } 

    В C ++ вы можете объявлять переменные где угодно.

    Может ли быть неверным объявлять переменную в блоке коммутатора?

    Вы можете создать переменную в инструкции switch, но вам нужно будет создать ее внутри блока, чтобы определить область этой переменной.

    Пример:

     switch(number){ case 1: { // Create object here // object is defined only for the scope of this block } break; case 2: { // etc. } break; default: break; } 

    Как решить предупреждение:

    1.Вставьте один ; в первой строке блока вашего дела

    Коды 2.Put внутри брекетов

    Давайте будем гением компьютера.