В Objective-C, как вы инициализируете константу из другой константы? - PullRequest
1 голос
/ 24 августа 2010
 NSString* const nits = @"nits";
 NSString* const nuts = nits;  // error: "initializer element is not constant"

Как это сделать?

Ответы [ 2 ]

2 голосов
/ 24 августа 2010

Литералы Constant String, такие как @"nits", жестко запрограммированы в двоичные файлы Objective-C.Строковые константы, такие как nits и nuts, должны быть определены как константа литерал , так как они также жестко закодированы.Присвоение nuts = nits не работает, потому что nits не является константным строковым литералом, хотя переменная постоянна во время выполнения.

Есть два способа исправить это:

  1. напишите строковый литерал @"nits" дважды
  2. используйте #define

Это может выглядеть так:

 #define NitsNutsString @"nits"
 NSString* const nits = NitsNutsString;
 NSString* const nuts = NitsNutsString;

В качестве альтернативы вы можете использовать #define s, но их нельзя экспортировать в заголовок так же чисто, как строки const.

1 голос
/ 24 августа 2010

Я не знаю target-c, но я мог бы представить, что, инициализируя что-либо из значения, которое не является литералом, вы в конечном итоге получаете не константу - независимо от объявления начального значения.

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