4

有时 Xcode 会在 case 之后的一行显示错误“ Expected expression ”。例如,Xcode用红色箭头指向UserContentViewController :

- (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 只在极少数情况下抱怨我的案例?我无法完全辨别哪种类型的代码会触发此错误。

4

1 回答 1

14

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

ARC 还添加了一些要求(或更严格的要求)来定义范围(因此在升级旧代码库时,您可能会遇到许多“switch case is in protected scope”错误需要修复)。这是因为 ARC 需要详细了解变量何时不再/不能被引用,以便正确处理发布。

一切都与为编译器提供有关已声明变量范围的足够信息有关。它们应该是单个案例的一部分,还是多个案例的一部分...

于 2013-07-10T22:32:46.083 回答