Objective-C 中的 switch 语句和实例变量分配

Posted

技术标签:

【中文标题】Objective-C 中的 switch 语句和实例变量分配【英文标题】:Switch statements and instance variable allocation in Objective-C 【发布时间】: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 行之后。 【参考方案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;

【讨论】:

以上是关于Objective-C 中的 switch 语句和实例变量分配的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Objective-C 中的头文件顶部有 import 和 class 语句?

js中的if判断语句和switch条件分支语句

switch的用法

switch语句的用法?

Jquery 和 List 中的 switch 语句

Java中的 switch语句用法