【发布时间】:2016-12-16 12:00:08
【问题描述】:
我有一个协议类,我在其中定义了多个字符串常量和包含这些字符串的数组常量。我正在移植一个 android 项目。
在我的Constants.h 中,我声明NSString 和NSArray 常量如下:
#imports.....
extern NSString *const constant1;
extern NSString *const constant2;
extern NSArray *const constantArr;
@protocol.....
然后在我的Constants.m 中,我定义了这些常量:
#import "Constant.h"
NSString *const constant1 = @"Constant1";
NSString *const constant2 = @"Constant2";
//I get an error at this line
NSArray *const constantArr = [NSArray arrayWithObject: constant1, constant2, nil];
定义 NSArray 时出现错误,显示为 Initializer element is not a compile-time constant。我相信我可能会以错误的方式初始化 NSArray 常量。
有没有人遇到过类似的问题或知道初始化 NSArray 常量的方法?谢谢
【问题讨论】:
-
您不能使用
arrayWithObject构造函数,因为它会在运行时创建数组。您可以使用@[constant1,constant2]数组字面量语法创建数组 -
在我的 .h 和 .m 中,我都尝试了
NSArray *const constantArr = @[constant1, constant2];,但仍然遇到同样的错误。 -
您需要输入
@"Comstant1"和@"Constant2"字符串,而不是在数组定义中使用变量 -
刚试过
NSArray *const constantArr = @[@"Constant1", @"Constant2"];,我仍然遇到同样的错误。我一定是在做傻事? -
经过更多研究,您无法通过这种初始化程序创建常量 Objective-C 对象。您需要在该对象初始化程序中创建该数组作为某个对象的属性。
标签: ios objective-c nsarray compile-time-constant