NSString* const nits = @"nits";
NSString* const nuts = nits; // error: "initializer element is not constant"
这是怎么做到的?
答案 0 :(得分:2)
常量字符串文字(例如@"nits"
)被硬编码到objective-c二进制文件中。字符串常量(例如nits
和nuts
)必须定义为常量字符串 literal ,因为它们也是硬编码的。赋值nuts = nits
不起作用,因为nits
不是常量字符串文字,即使变量在运行时是常量。
有两种方法可以解决这个问题:
@"nits"
#define
这可能如下所示:
#define NitsNutsString @"nits"
NSString* const nits = NitsNutsString;
NSString* const nuts = NitsNutsString;
或者,您只能使用#define
,但这些不能像标准字符串那样在标题中导出。
答案 1 :(得分:1)
我不知道objective-c但是我会想象通过从一个不是文字的值初始化某些东西然后你最终得到的不是常量 - 无论初始值声明如何。