Как операторы switch работают в Objective-C? - PullRequest
0 голосов
/ 26 января 2012

Я использую операторы switch в Objective-C, и когда я вкладываю оператор switch в другой оператор switch, компилятор обнаруживает множество ошибок. Итак, мой общий вопрос: как операторы switch влияют на то, какие методы я могу вызвать, и какой тип поведения вызывает компилятор, чтобы генерировать ошибки?

switch ([indexPath section]) 
{
    case 0:
        cell.textLabel.text = [infoKeysArray objectAtIndex:indexPath.row];
        CountdownFormatter *formatter = [[CountdownFormatter alloc] init];
        switch (indexPath.row) {
            case 0:
                cell.detailTextLabel.text = [formatter stringForCountdownInterval:taskInfo.duration];
                break;
            case 1:
                cell.detailTextLabel.text = [formatter stringForCountdownInterval:taskInfo.elapsedTime];
            default:
                break;
        }
        [formatter release];
        break;
    case 1:
        cell.textLabel.text = [actionsKeysArray objectAtIndex:indexPath.row];
        //NSArray *segments = [NSArray arrayWithObjects:@"Low", @"Medium", @"High", nil];
        switch (indexPath.row) {
            case 0:
                cell.detailTextLabel.text = priority;
                [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
                break;
            case 1:
                [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
                UISwitch *switch = [[UISwitch alloc] init];
                break;
            case 2:

                break;
            default:
                break;
        }
        break;
    case 2:
        cell.textLabel.text = [detailsKeysArray objectAtIndex:indexPath.row];
        break;
    default:
        break;
}

Вот где у меня проблемы. Почему я не могу объявить UISwitch внутри этого вложенного оператора switch? Я знаю, что написал [[UISwitch alloc] init], но компилятор помечает его как ошибку. Есть причина, по которой это случится?

Ответы [ 3 ]

2 голосов
/ 26 января 2012

Я не могу сказать это лучше, чем этот ответ Почему переменные не могут быть объявлены в операторе switch? .

Проблема в том, где / когда вы объявляете переменные иобласть, в которой они находятся.

1 голос
/ 26 января 2012

Операторы switch не оказывают никакого влияния на obj-c. Они являются чистыми конструкциями C и работают в Obj-C точно так же, как и в C. Что касается ошибок, вы, вероятно, имеете какую-то синтаксическую ошибку, если вы получаете ошибки компилятора при вложении операторов switch.

1 голос
/ 26 января 2012

когда я вкладываю оператор switch в другой оператор switch, компилятор обнаруживает множество ошибок

У меня отлично работает :

int main()
{
    int x = 1;
    int y = 2;

    switch(x)
    {
    case 1:
       switch(y)
       {
       case 2:
         printf("Hello!\n");
       }
    }

    return 0;
}

Итак, мой общий вопрос: как операторы switch влияют на то, какие методы я могу вызвать

Они не делают.

и на какой типповедения приводит к тому, что компилятор генерирует ошибки?

Поведение программиста.

EDIT - В ответ на опубликованный вами код, без возможности компиляцииили посмотрите, в чем ошибка, я бы заподозрил:

case 1:
        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        UISwitch *switch = [[UISwitch alloc] init];
        break;

может быть:

case 1:
{
        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        UISwitch *myswitch = [[UISwitch alloc] init];
        break;
}

Обратите внимание на фигурные скобки и выбор имени переменной, отличной от ключевого слова.

...