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 语句和实例变量分配的主要内容,如果未能解决你的问题,请参考以下文章