Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C—NSArray型静态类变量_Ios_Objective C_Arrays_Static_Nsarray - Fatal编程技术网

Ios 目标C—NSArray型静态类变量

Ios 目标C—NSArray型静态类变量,ios,objective-c,arrays,static,nsarray,Ios,Objective C,Arrays,Static,Nsarray,我将我的类的一些默认初始化值存储为静态类变量。像这样: // List.h static NSString *DEFAULT_LIST_NAME = @"Not Set"; static BOOL DEFAULT_RECURSION = NO; 我还需要将类型为NSArray*的静态变量设置为空数组。如何做到这一点?目前我得到了一个错误: 初始值设定项元素不是编译时常量 为此定义类方法: .m文件 @implementation test static NSArray *array; + (

我将我的类的一些默认初始化值存储为静态类变量。像这样:

// List.h
static NSString *DEFAULT_LIST_NAME = @"Not Set";
static BOOL DEFAULT_RECURSION = NO;
我还需要将类型为
NSArray*
的静态变量设置为空数组。如何做到这一点?目前我得到了一个错误:

初始值设定项元素不是编译时常量


为此定义类方法:

.m文件

@implementation test
static NSArray *array; 
+ (NSArray *)array { 
    if (!array) array = [[NSArray alloc] init]; 
    return array;
 } 
@end

您将得到编译时错误“Initializer元素不是编译时常量”,因为静态变量的值实际上是在编译时写入可执行文件的。因此,您只能使用常量值(而不是在运行时执行的alloc/init)。您可以使用以下任一选项

  • 您可以编写
    static NSArray*arr=nil
    并使用
    +initialize
    创建数组

  • 另一个选项是您可以使用
    \uuuuuuu属性((构造函数))

  • 另一种选择是将源文件的类型从Objective-C切换到Objective-C++(或者将其从.m重命名为.mm,这具有相同的效果)。在C++中,这样的初始化器不需要编译时常量值,并且原始代码将工作得很好

  • 此外,您还可以使用Pat_Morita提供的解决方案


  • 嗨,这个问题和你的相似。有不同的方法可以做到这一点。也许你想检查一下:@SamB我为什么要这样做?显示你的错误截图。如果我使用上面的静态代码行,我的Xcode 8中不会出现任何编译警告或错误