Забавная ошибка переключения в iOS - PullRequest
3 голосов
/ 30 августа 2011

Не могли бы вы попробовать эти два кода? Первый вызывает ошибку, а не второй. Я хотел бы знать, если это из-за моей версии XCode, и если нет, то почему это происходит.

        int typeNumber = 4;
        switch (typeNumber) {
            case typeNumberEvent:
                NSString myString;
                break;
            case typeNumberAd:
                NSURL myURL;
                break;
            default:
                NSNumber myNumber;
                break;
        }

        int typeNumber = 4;
        switch (typeNumber) {
            case typeNumberEvent:
                NSLog(@"hello");
                NSString myString;
                break;
            case typeNumberAd:
                NSLog(@"hello");
                NSURL myURL;
                break;
            default:
                NSLog(@"hello");
                NSNumber myNumber;
                break;
        }

Ответы [ 2 ]

5 голосов
/ 30 августа 2011

Компилятор выдает ошибку, если вы пытаетесь создать переменную в первой строке case.

Просто заключите блок case в фигурные скобки. Все будет в порядке.

case typeNumberEvent: {
        NSString myString;
        break;
}
1 голос
/ 30 августа 2011

Если вы объявляете переменные внутри блока case, вы должны объявить этот блок с помощью фигурных скобок.Ваш пример будет выглядеть так:

    int typeNumber = 4;
    switch (typeNumber) {
        case typeNumberEvent:
            {
                NSString myString;
                break;
            }
        case typeNumberAd:
            {
                NSURL myURL;
                break;
            }
        default:
            {
                NSNumber myNumber;
                break;
            }
    }

Этот ответ также хорошо подводит итог: Могу ли я объявить переменные внутри оператора переключения Objective-C?

...