Objective c 如何创建静态NSString常量的静态NSString[]?
我的一个头文件中有一个静态NSString常量集合,我想在新的静态NSArray(或NSString[])中使用它,但遇到以下错误Objective c 如何创建静态NSString常量的静态NSString[]?,objective-c,static,nsstring,nsarray,constants,Objective C,Static,Nsstring,Nsarray,Constants,我的一个头文件中有一个静态NSString常量集合,我想在新的静态NSArray(或NSString[])中使用它,但遇到以下错误 Initializer Element is not a compile-time constant 我的字符串和数组设置如下: static NSString * const SOMEVAL = @"val"; static NSString * const SOMEKEY = @"key"; static NSString *KEYLIST[] = { SO
Initializer Element is not a compile-time constant
我的字符串和数组设置如下:
static NSString * const SOMEVAL = @"val";
static NSString * const SOMEKEY = @"key";
static NSString *KEYLIST[] = { SOMEVAL, SOMEKEY };
是否可以以这种方式编译此静态数组,或者以前声明的NSString是否始终显示为非编译时常量?您不应该在头文件中使用static。在标题中声明:
extern NSString * const SOMEVAL;
extern NSString * const SOMEKEY;
extern NSString *KEYLIST[];
然后在源文件中定义:
NSString * const SOMEVAL = @"val";
NSString * const SOMEKEY = @"key";
NSString *KEYLIST[] = { SOMEVAL, SOMEKEY };
如果您愿意依赖编译器组合相同的字符串常量(这是一个相当安全的赌注),您可以这样做:
#define SOMEVAL @"val"
#define SOMEKEY @"key"
static NSString *KEYLIST[] = { SOMEVAL, SOMEKEY };
编译器永远不会将对象视为“编译时常量”;你必须做两个变通方法中的一个 可以对字符串使用预处理器定义:
#define KEY @"key"
#define VAL @"val"
static NSString * const key = KEY;
static NSString * const val = VAL;
static NSString * keyVal[] = { KEY, VAL };
或者,您可以在函数或方法中初始化数组,该函数或方法保证在需要数组之前被调用。唯一的选择是:
static NSString * keyVal[2];
__attribute__((constructor))
void setKeyVal(void)
{
keyVal[0] = key;
keyVal[1] = val;
}
密切相关的类的名称是另一个。注意,
static NSString*KEYLIST[]
没有描述NSArray。更新了标题以反映@HotLicks注释