2012-01-23 11 views
9

Mam problem z tworzeniem nowych zmiennych lokalnych wewnątrz instrukcji switch. Myślałem, że to coś w nagłówkach klas, ale nawet otrzymywałem błędy, próbując przydzielić nowy NSObject. Oto mój składnia:Instrukcje przełączania i przydzielanie zmiennych instancji w Objective-C

-(NSArray *)charactersFromChapter:(NSInteger)number { 
    NSObject *noError = [[NSObject alloc] init]; 
    //line above does not cause error 
    NSArray *characters; 
    switch (number) { 
     case 1: 
      NSObject *obj = [[NSObject alloc] init]; 
      //error happens in line above (Expected expression) 
      characters = [NSArray arrayWithObject:obj]; 
      break; 
     case 2: 

      break; 
     case 3: 

      break; 
    } 
    return characters; 
} 
+2

Uwaga, to nie są 'Ivars'. Ivar jest zmienną instancji, którą możesz zadeklarować w pliku nagłówkowym. Są to po prostu zmienne lokalne. Byłoby dobrze, gdyby komitet standardów C zezwolił na styl, który próbowaliście. –

+0

dzięki za wyjaśnienie, zmienię pytanie – Justin

+1

@GrahamPerks: Ivars nie muszą już być w nagłówku; mogą być natychmiast po linii '@ implementacja'. –

Odpowiedz

32

W instrukcji switch nie można zainicjować zmiennych bez uprzedniego ustawienia zakresu, więc aby go naprawić, wykonaj następujące czynności:

switch (some_expression) { 
    case case_1: 
    { // notice the brackets 
     id some_obj = [MyObj new]; 
     break; 
    } 
    default: 
     break; 
} 
+0

tak, to naprawiono. Dzięki za szybką odpowiedź. zaakceptuje odpowiedź po 10 minutach, gdy jest to dozwolone – Justin

+0

Dziękuję. it's worked :) –

5

Trzeba albo zadeklarować "obj" poza switch lub użyj nawiasów w następujący sposób:

switch (number) { 
    case 1: { 
     NSObject *obj = [[NSObject alloc] init]; 
     //error happens in line above (Expected expression) 
     characters = [NSArray arrayWithObject:obj]; 
     break; 
    } 

Zobacz tutaj, aby uzyskać więcej informacji: Why can't variables be declared in a switch statement?

+1

dzięki za link, mam kilka badań, aby zrobić – Justin

1

W przypadku przełączników można używać tylko wyrażeń.

Można to naprawić za pomocą mniej więcej tak:

case 1: 
{ 
     NSObject *obj = [[NSObject alloc] init]; 
     characters = [NSArray arrayWithObject:obj]; 
     break; 
} 
Powiązane problemy