为什么我的切换案例有时需要在Objective-C中使用大括号?

Why do my switch cases sometime need braces in Objective-C?

本问题已经有最佳答案,请猛点这里访问。

有时候Xcode会在一个案例之后的行中显示一个错误"expected expression"。例如,xcode用红色箭头指向userContentViewController:

1
2
3
4
5
6
7
8
9
10
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    switch (indexPath.row) {
        case IndexVideo:
            UserContentViewController* detailViewController = [[UserContentViewController alloc] initWithUser:self.user];
            [self.navigationController pushViewController:detailViewController animated:YES];
            break;

    }
}

如果我在我的箱子周围加上大括号,错误就消失了。首先,我想知道不使用大括号有什么问题。我从来没有在其他语言的案例中使用大括号。其次,为什么Xcode只是偶尔抱怨我的案例?我不太清楚是什么类型的代码触发了这个错误。


基本上,如果您想要声明一个变量,您需要添加大括号来定义范围。

ARC还添加了一些需求(或者更严格的需求)来定义作用域(这样,在升级旧代码库时,您可能会遇到许多"switch case is in protected scope"错误需要修复)。这是因为当一个变量不再被引用或不能被引用时,ARC需要详细地知道,这样它才能正确地处理发布。

一切都与给编译器足够的关于声明变量范围的信息有关。他们应该是一个案件的一部分,还是多个案件的一部分…