Objective-C Заявление о переключении

Возможный дубликат:
Объявление переменных внутри оператора switch

Мне трудно получить XCode, чтобы я мог написать конкретный оператор switch в Objective-C. Я famiiar с синтаксисом и могу переписать его, как если бы /else блоки, но мне любопытно.

switch (textField.tag) {
        case kComment:
            ingredient.comment = textField.text;
            break;
        case kQuantity:
            NSLog(@""); // removing this line causes a compiler error           
            NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
            fmt.generatesDecimalNumbers = true;
            NSNumber *quantity = [fmt numberFromString:textField.text];
            [fmt release]; 
            ingredient.quantity = quantity;
            break;
    }

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

Ответ 1

Вы не можете добавить объявление переменной после метки. Вы можете добавить точку с запятой вместо вызова NSLog(), например. Или объявите переменную перед коммутатором. Или добавьте еще один {}.

Ответ 2

Удалите часть объявления переменной в инструкции switch.

Внутри оператора switch вы не можете создать какую-либо переменную в Objective-C.

NSNumberFormatter *fmt = nil;
NSNumber *quantity = nil;
switch (textField.tag) {
        case kComment:
            ingredient.comment = textField.text;
            break;
        case kQuantity:
            fmt = [[NSNumberFormatter alloc] init];
            fmt.generatesDecimalNumbers = true;
            quantity = [fmt numberFromString:textField.text];
            [fmt release]; 
            ingredient.quantity = quantity;
            break; 
    }

Попробуйте это...