如何通过连接Obj-C中的字符串来创建常量NSString?

Eri*_*AND 17 objective-c

我试图通过连接其他NSString实例来实现常量NSString.

以下是我在实现文件中所做的事情:

static NSString *const MY_CONST = @"TEST";
static NSString *const MY_CONCATENATE_CONST = [NSString stringWithFormat:@"STRING %@", MY_CONST];
Run Code Online (Sandbox Code Playgroud)

它导致以下编译错误:Initializer元素不是常量

我想这是因为stringWithFormat没有返回一个常量的NSString,但由于没有其他方法来连接Obj-C中的字符串,我该怎么做?

谢谢你的帮助,

埃里克.

Pat*_*ick 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";
Run Code Online (Sandbox Code Playgroud)


Nie*_*tle 1

我认为你需要退后一步考虑一下字符串是否需要定义为 const。

显然,该字符串不是常量,因为您试图为其分配一个新值 - 这是不可能的,因为您明确指示编译器使用 const 关键字确保该值没有更改。

如果字符串作为类中的属性驻留,您可以将其设置为只读属性 - 即访问器方法,但没有设置器方法。然后,您就可以在类内部按照您的意愿构造字符串,同时防止调用者更改值。

  • 我同意这一点,但是如果我需要通过连接其他常量来定义一个常量(一个实际的常量,永远不会改变)怎么办?在 Java 中,这很简单: private static final String CONST1 = "CONST1"; 私有静态最终字符串 CONST2 = "CONST2"; 私有静态最终字符串 CONCAT = CONST1 + " " + CONST2; 这允许我有 3 个常量,第三个是另外两个常量的串联。 (10认同)