将类方法的返回值分配给变量错误

时间:2013-08-11 15:05:27

标签: ios objective-c

在过去的几个小时里,我一直在尝试做一些对我来说非常有意义的事情而不是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不支持(另一个理由是讨厌这种可怕的语言)。对不起我的无知,谢谢你,无论你是谁,都试图帮忙!再见!

1 个答案:

答案 0 :(得分:3)

这里有两个不同的问题。

  1. 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。所以一个可以在里面声明变量 不使用括号{ ... }的开关语句。

  2. 使用自动参考计数 不再 对于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;
    }
    
  3. 因此,这更像是ARC问题,而不是Objective-C问题。