2011-12-22 103 views
10

可能重複:
Declaring variables inside a switch statementObjective-C的switch語句

我有困難得到了XCode讓我寫在Objective-C特定的switch語句。我熟悉的語法,可以重寫它,如果/其他塊,但我很好奇。

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; 
    } 

我看不到語法錯誤,就好像我需要欺騙編譯器來允許這樣做。

回答

15

您不能在標籤後添加變量聲明。例如,您可以添加分號而不是調用NSLog()。或者在切換之前聲明變量。或者添加另一個{}

+0

最簡單的方法就是把分號情況和申報後之間。 – Ariel 2011-12-22 15:08:08

+0

是的,它肯定是最少的擊鍵次數,但取決於上下文,最美觀的解決方案可能會有所不同:) – 2011-12-22 15:09:48

+0

這就是爲什麼我投了你的答案:) – Ariel 2011-12-22 15:13:06

-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; 
    } 

嘗試......

+1

看來你可以 - 我不明白爲什麼不。在switch語句的第二行中,聲明起作用。即使第一行只是';' – Jhong 2012-05-07 16:12:26