Как создать константу NSString путем объединения строк в Obj-C? - PullRequest
17 голосов
/ 17 июня 2010

Я пытаюсь создать экземпляр константы NSString путем конкатенации других экземпляров NSString.

Вот что я делаю в своем файле реализации:

static NSString *const MY_CONST = @"TEST";
static NSString *const MY_CONCATENATE_CONST = [NSString stringWithFormat:@"STRING %@", MY_CONST];

Это приводит к следующей ошибке компиляции: Элемент инициализатора не является константой

Полагаю, это потому, что stringWithFormat не возвращает константу NSString, но поскольку в Obj-C нет другого способа объединить строки, что я должен делать?

Спасибо за вашу помощь,

Эрик.

Ответы [ 3 ]

48 голосов
/ 03 марта 2011

Я думал, что должен быть способ сделать это, но лучшее, что я мог сделать, это использовать директиву #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";
3 голосов
/ 17 июня 2010

статическое значение 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];
1 голос
/ 17 июня 2010

Я думаю, вам нужно отступить назад и подумать о , если , строка должна быть определена как const.

Очевидно, что строка не является константой, так как вы пытаетесь присвоить ей новое значение - и это невозможно, так как вы специально указали компилятору, что значение не было изменено с помощью ключевого слова const.

Если строка находится как свойство в классе, вы можете сделать его доступным только для чтения - то есть метод доступа, но не метод установки. После этого вы сможете создать свою строку внутри класса так, как пожелаете, не позволяя вызывающим абонентам изменять значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...