Programing

Objective-C switch 문 내에서 변수를 선언 할 수 있습니까?

lottogame 2020. 12. 25. 08:57
반응형

Objective-C switch 문 내에서 변수를 선언 할 수 있습니까?


이 코드에서 구문 오류가 어디에 있는지 알 수 없기 때문에 눈이 멀다고 생각합니다.

if( cell == nil ) {
    titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero
        reuseIdentifier:CellIdentifier ] autorelease
    ];

    switch( cellNumber ) {
        case 1:
            NSString *viewDataKey = @"Name";
etc...

컴파일하려고 하면 마지막 줄의 '*'토큰 앞에 오류 : 구문 오류가 발생 합니다.

그런 기본적인 질문에 대해 죄송하지만 내가 무엇을 놓치고 있습니까?


적절한 Objective-C 컴파일러는 없지만 C 구문이 동일하다면 :

switch { … }각각에 대해 하나씩이 아니라 하나의 블록 수준 범위를 제공합니다 case. 범위의 시작 외의 위치에 변수를 선언하는 것은 불법이며,이 안에 switch있다 , 특히 초기화가 이상 뛰어 될 수 있기 때문에 위험합니다.

다음 중 하나로 문제가 해결됩니까?

NSString *viewDataKey;
switch (cellNumber) {
    case 1:
        viewDataKey = @"Name";
}

switch (cellNumber) {
    case 1: {
        NSString *viewDataKey = @"Name";
    }
}

case 문의 시작 부분에는 변수를 선언 할 수 없습니다. 그것으로 만 구성된 테스트 케이스를 작성하면 동일한 오류가 발생합니다.

블록 중간에 선언 된 변수와 관련이 없습니다. GCC가 case 문 시작 부분에 선언을 허용하지 않도록 허용하는 표준을 채택하는 경우에도 마찬가지입니다. GCC는 사례 레이블을 줄의 일부로 간주하므로 선언을 허용하지 않습니다.

간단한 해결 방법은 케이스 시작 부분에 세미콜론을 넣어 선언이 시작 부분에 있지 않도록하는 것입니다.


C에서는 비 선언문 앞에있는 블록의 시작 부분에서만 변수를 선언 할 수 있습니다.

{
   /* you can declare variables here */

   /* block statements */

   /* You can't declare variables here */
}

C ++에서는 필요한 곳에 변수를 선언 할 수 있습니다.


스위치 블록 내에서 변수를 선언하는 것이 유효하지 않을 수 있습니까?


switch 문 내에서 변수를 만들 수 있지만 해당 변수의 범위를 정의하려면 블록 내에서 만들어야합니다.

예:

switch(number){

    case 1:
        {
            // Create object here
            // object is defined only for the scope of this block
        }
        break;
    case 2:
        {
            // etc.
        }
        break;
    default:
        break;

}

경고를 해결하는 방법 :

1. ;케이스 블록의 첫 번째 줄에 하나 삽입 하십시오.

2. 중괄호 안에 코드 입력

참조 URL : https://stackoverflow.com/questions/1115304/can-i-declare-variables-inside-an-objective-c-switch-statement

반응형