我试图通过连接其他NSString实例来实现常量NSString。
以下是我在实施文件中所做的事情:
static NSString *const MY_CONST = @"TEST";
static NSString *const MY_CONCATENATE_CONST = [NSString stringWithFormat:@"STRING %@", MY_CONST];
导致以下编译错误:Initializer元素不是常量
我想这是因为stringWithFormat没有返回一个常量的NSString,但由于没有其他方法可以在Obj-C中连接字符串,我该怎么办?
感谢您的帮助,
埃里克。
答案 0 :(得分:48)
我认为必须有办法做到这一点,但我能做的最好的事情就是使用#define指令。例如,
// Define the base url as an NSString
#define BASE_URL @"http://www.milhouse.co.uk/"
// Now the derived strings glued by magic
NSString *const kBaseURL = BASE_URL;
NSString *const kStatusURL = BASE_URL @"status.html";
NSString *const kBalanceURL = BASE_URL @"balance.html";
答案 1 :(得分:3)
静态const对象值是在编译时确定的,因此您确实无法向其初始化添加任何方法调用。作为替代方案,您可以执行以下操作:
static NSString *const MY_CONST = @"TEST";
static NSString *MY_CONCATENATE_CONST = nil;
if (nil == MY_CONCATENATE_CONST)
MY_CONCATENATE_CONST = [NSString stringWithFormat:@"STRING %@", MY_CONST];
答案 2 :(得分:1)
我认为您需要退一步思考如果字符串需要定义为const。
显然,字符串不是常量,因为您正在尝试为其分配新值 - 这是不可能的,因为您特别指示编译器确保使用const关键字不会更改该值。 / p>
如果字符串作为类中的属性存在,则可以使其成为只读属性 - 即访问器方法,但不使用setter方法。然后,您可以在内部构建字符串,同时保持调用者不更改值。