【问题标题】:Why do my switch cases sometime need braces in Objective-C? [duplicate]为什么我的 switch case 有时在 Objective-C 中需要大括号? [复制]
【发布时间】:2013-07-09 01:21:59
【问题描述】:

有时 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 只在极少数情况下抱怨我的案例?我不太清楚是什么类型的代码触发了这个错误。

【问题讨论】:

标签: objective-c


【解决方案1】:

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

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

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

【讨论】:

  • 确定是因为ARC?我认为在纯 C 语言中甚至需要它。
  • 没有大括号,为什么不理解我希望范围和开关一样?
  • @Pwner C 是一种非常低级的语言,所以编译器什么都不做。如果它没有看到大括号,则表示您没有要求范围。它不会把它放在那里。
  • 我认为你仍然需要没有 ARC 的牙套
猜你喜欢
  • 1970-01-01
  • 2019-11-04
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
相关资源
最近更新 更多