2012-01-23 2 views
9

switch 문 안에 새로운 로컬 변수를 만드는 데 문제가있는 것 같습니다. 내 수업 헤더에 뭔가 있다고 생각했지만 새로운 NSObject를 할당하려고 할 때 오류가 발생했습니다. 여기 내 구문입니다 :Objective-C에서 switch 문과 인스턴스 변수 할당

다음과 같이 선언 "OBJ"외부 스위치 문에, 또는 괄호를 사용하거나 필요
-(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

주, 사람들은 '인스턴스 변수는'하지 않습니다. ivar은 인스턴스 변수로, 헤더 파일에 선언합니다. 이것들은 단순히 지역 변수입니다. C 표준위원회가 시도한 스타일을 허용하면 좋을 것입니다. –

+0

설명해 주셔서 고맙습니다. 질문을 수정하겠습니다. – Justin

+1

@GrahamPerks : Ivars는 헤더에 더 이상있을 필요가 없습니다. '@ implementation' 라인의 직후에 위치 할 수 있습니다. –

답변

32

switch 문에서 먼저 범위를 설정하지 않고 변수를 초기화 할 수 없으므로 다음과 같이 수정하십시오.

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

네, 할 공부가있어. 신속한 답변을 보내 주셔서 감사합니다. 그것이 허용 될 때 10 분 후 대답을 수락합니다 – Justin

+0

감사합니다. –

5

:

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

자세한 내용은 여기를 참조하십시오 : Why can't variables be declared in a switch statement?

+1

링크를 주셔서 감사합니다, 나는 그것을 해결하는 – Justin

1

스위치 케이스에서는 표현식 만 사용할 수 있습니다.

당신은 이런 식으로 뭔가를 사용하여이 문제를 해결할 수 있습니다

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