【问题标题】:Switch statements and instance variable allocation in Objective-CObjective-C 中的 switch 语句和实例变量分配
【发布时间】:2012-01-23 02:40:08
【问题描述】:

我似乎在 switch 语句中创建新的局部变量时遇到了问题。我认为这是我的类头文件中的内容,但在尝试分配新的 NSObject 时甚至出现错误。这是我的语法:

-(NSArray *)charactersFromChapter:(NSInteger)number {
    NSObject *noError = [[NSObject alloc] init];
    //line above does not cause error
    NSArray *characters;
    switch (number) {
        case 1:
            NSObject *obj = [[NSObject alloc] init];
            //error happens in line above (Expected expression)
            characters = [NSArray arrayWithObject:obj];
            break;
        case 2:

            break;
        case 3:

            break;
    }
    return characters;
}

【问题讨论】:

  • 注意,这些不是 'ivars'。 ivar 是一个实例变量,可以在头文件中声明。这些只是局部变量。如果 C 标准委员会允许您尝试的风格,那肯定会很好。
  • 感谢您的澄清,我会修改问题
  • @GrahamPerks:Ivar 不再需要出现在标题中;它们可以紧跟在@implementation 行之后。

标签: objective-c ios cocoa-touch cocoa switch-statement


【解决方案1】:

在 switch 语句中,如果不先设置范围就无法初始化变量,因此要修复它,请执行以下操作:

switch (some_expression) {
   case case_1:
   { // notice the brackets
       id some_obj = [MyObj new];
       break;
   }
   default:
       break; 
} 

【讨论】:

  • 是的,解决了它。感谢您的及时回复。允许时将在 10 分钟后接受答案
【解决方案2】:

您需要在 switch 语句之外声明“obj”,或者使用大括号,如下所示:

switch (number) {
    case 1: {
        NSObject *obj = [[NSObject alloc] init];
        //error happens in line above (Expected expression)
        characters = [NSArray arrayWithObject:obj];
        break;
    }

请参阅此处了解更多信息: Why can't variables be declared in a switch statement?

【讨论】:

    【解决方案3】:

    在 switch-case 中你只能使用表达式。

    您可以使用以下方法解决此问题:

    case 1:
    {
           NSObject *obj = [[NSObject alloc] init];
           characters = [NSArray arrayWithObject:obj];
           break;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 2010-11-10
      相关资源
      最近更新 更多