Ответ 1
Вы не можете добавить объявление переменной после метки. Вы можете добавить точку с запятой вместо вызова NSLog()
, например. Или объявите переменную перед коммутатором. Или добавьте еще один {}
.
Возможный дубликат:
Объявление переменных внутри оператора 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;
}
Я не вижу синтаксическую ошибку, как будто мне нужно обмануть компилятор, чтобы разрешить это.
Вы не можете добавить объявление переменной после метки. Вы можете добавить точку с запятой вместо вызова NSLog()
, например. Или объявите переменную перед коммутатором. Или добавьте еще один {}
.
Удалите часть объявления переменной в инструкции 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;
}
Попробуйте это...