79

切入正题,我重新创建了我的问题,因为它是不言自明的。

这符合没有错误:

switch (n) {
    case 1:
        NSLog(@"");
        NSString *aStr;
        break;
    default:
        break;
    }

这编译错误,它只缺少 NSLog():

switch (n) {
    case 1:
        NSString *aStr;
        break;
    default:
        break;
    }

它在编译“ 'NSString'之前的预期表达式”时引发错误

我在这里错过了什么吗?

4

3 回答 3

164

在正常的 C 中,在这两种情况下,您都必须将其括在括号中。我怀疑这可能会解决您的问题:

case 1:
{
    NSLog(@"");
    NSString *aStr;
    break;
}

有关更多信息,请参阅此 SO 问题

解决此问题的另一种方法是在 case 标签和第一个声明之间放置一个语句,就像您在上面的工作示例中所做的那样。有关更多信息,请参阅评论和 Quinn Taylor 的回答。

于 2010-01-10T11:28:37.290 回答
23

您不能将变量声明为不带括号的 a 中的第一条语句case,以及在基于 C 语言的许多其他上下文中。有关详细信息,请参阅在 switch 语句中声明变量

于 2010-01-10T16:08:48.220 回答
3
case 0: {
    Loading my nib file;
    break; 
}
case 1: {
    Loading another nib file;
    break; 
}
Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example:
于 2011-01-20T06:44:20.787 回答