【问题标题】:How do switch statements work in Objective-C?在 Objective-C 中 switch 语句是如何工作的?
【发布时间】:2012-01-25 23:16:08
【问题描述】:

我在 Objective-C 中使用 switch 语句,当我在另一个 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;
}

这是我遇到问题的地方。为什么我不能在这个嵌套的 switch 语句中声明 UISwitch?我知道我写了 [[UISwitch alloc] init] 但编译器将其标记为错误。有什么原因会发生吗?

【问题讨论】:

  • 嵌套switch语句没有错。您为什么不发布您的代码和错误消息,以便我们尝试修复它?
  • 我试图不只是让人们直接编辑我的代码,我宁愿自己弄清楚,但显然这里发生了一些我不知道的事情。

标签: objective-c switch-statement


【解决方案1】:

我不能说比这个答案更好Why can't variables be declared in a switch statement?

问题在于您在何处/何时声明变量以及它们所在的范围。

【讨论】:

  • 是的,我偶然发现了类似的东西。我没有意识到这是问题所在。我最终问错了问题,但得到了正确的答案。
【解决方案2】:

Switch 语句对 obj-c 没有任何影响。它们是纯 C 结构,在 Obj-C 中的工作方式与在 C 中的工作方式完全相同。至于错误,如果在嵌套 switch 语句时遇到编译器错误,则可能会出现某种语法错误。

【讨论】:

  • 我想写一个switch 语句会有一些效果
【解决方案3】:

当我在另一个 switch 语句中嵌套一个 switch 语句时,编译器会发现很多错误

Works fine for me:

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

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

    return 0;
}

所以我的一般问题是 switch 语句如何影响我可以调用的方法

他们没有。

什么类型的行为导致编译器产生错误?

程序员的行为。

编辑 - 响应您发布的代码,无法编译或查看我怀疑的错误:

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

可能是:

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

注意大括号和变量命名的选择,而不是关键字。

【讨论】:

  • 这与在 switch 语句的范围内声明变量有关;基本上,这样做是违法的。
  • @gurooj 是的,这就是我添加大括号的原因。
猜你喜欢
  • 2015-01-08
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
相关资源
最近更新 更多