在过去的几个小时里,我一直在尝试做一些对我来说非常有意义的事情而不是Xcode,我仍然没有想出办法。 所以就这样了。
NSArray *array = [MedInfo getCategoryFirstIndexArray];
此处,getCategoryFirstIndexArray
只是MedInfo
的一种方法:
@interface MedInfo : NSObject
+(NSArray *)getCategoryFirstIndexArray;
@end
但Xcode一直在告诉我代码中有错误,说'预期表达'?
有趣的是,如果我只放[MedInfo getCategoryFirstIndexArray];
,编译器说它没问题,但是一旦我试图将返回值分配给另一个变量,就会出现错误。
那我在这里做错了什么?我问的太多了吗?
编辑: 好吧,这是愚蠢的。我一直在尝试在switch语句中创建一个新变量,如下所示:
switch(self.viewType.integerValue)
{
case 0:
break;
default:
NSArray *array = [MedInfo getCategoryFirstIndexArray];
break;
}
显然我不知道目标-C不支持(另一个理由是讨厌这种可怕的语言)。对不起我的无知,谢谢你,无论你是谁,都试图帮忙!再见!
答案 0 :(得分:3)
这里有两个不同的问题。
C和Objective-C都不允许在标签后直接声明变量 (请参阅Declaring variables inside a switch statement或此答案:https://stackoverflow.com/a/1115323/1187415)。所以
switch (k) {
case 10:
break;
default:
int x = 20; // ERROR: Expected expression
break;
}
是两种语言中的语法错误。如果在标签后添加分号,则可以使用它:
default: ;
int x = 20;
break;
这适用于C和Objective-C。所以一个可以在里面声明变量
不使用括号{ ... }
的开关语句。
使用自动参考计数, 不再 对于Objective-C对象 (比较When converting a project to use ARC what does "switch case is in protected scope" mean?):
switch (k) {
case 10: ;
NSMutableArray *a = [NSMutableArray array];
// ...
break;
default: // ERROR: Switch case is in protected mode
break;
}
原因是
ARC编译器需要一个明确定义的范围来控制生命周期
宾语。而现在唯一的解决方案是引入一个
{ ... }
的其他范围:
switch (k) {
case 10: {
NSMutableArray *a = [NSMutableArray array];
// ...
}
break;
default: // Switch case is in protected mode
break;
}
因此,这更像是ARC问题,而不是Objective-C问题。