Немного опоздал на вечеринку, но так как вы не изменяете значения в ходе программы, если бы вы имели дело только со строками, вы могли бы сделать следующее, объявив свой массив с помощью массива C
:
extern NSString * const MY_CONSTANT_STRING_ARRAY[];
в вашем constants.h
файле, а затем в constants.m
вы можете добавить к нему объекты следующим образом:
NSString * const MY_CONSTANT_STRING_ARRAY[] = { @"foo", @"bar" };
Затем, чтобы получить доступ к члену, вы можете сделать цикл for таким же образом с помощью оператора C
sizeof()
:
Это, очевидно, массив C
, а не NSArray
, поэтому к нему не прикрепляются все забавные методы, такие как objectAtIndex:
, поэтому вы можете создать вспомогательную функцию где-нибудь в вашей программе, которая проходит по циклу все строки, используя метод, который я описал выше, и возвращает NSArray
(или NSMutableArray
четный). Но если вы делали то, что я есть, и вам просто нужен постоянный массив значений NSString
для использования в вашей программе, этот метод работает лучше всего.
Делая это таким образом, вы инкапсулируете все ваши константы строкового массива в constants.h
и по-прежнему доступны в вашей программе, добавив constants.h
в ваш файл .pch
вместо создания синглтона только для этого массива значений или настроек массив с небольшим кодом, который как бы побеждает назначение файла constants
, потому что он удаляет фактические константы из файла constants
..
РЕДАКТИРОВАТЬ за @ JesseGumpo's Comment :
Поскольку могут возникнуть проблемы с использованием sizeof()
для определения размера массива, простой обходной путь - объявить размер массива в файле констант следующим образом:
//.h
extern int SIZE_OF_MY_CONSTANTS_ARRAY;
///.m
int SIZE_OF_MY_CONSTANTS_ARRAY = 2;
А затем для доступа к членам цикла for вы можете сделать это следующим образом:
for (int i=0; i < SIZE_OF_MY_CONSTANTS_ARRAY; i++)
NSLog(@"my constant string is: %@", MY_CONSTANT_STRING_ARRAY[i]);
Да, это не динамически фиксирует размер массива, но если вы объявляете массив в файле констант, вы уже знаете размер этого массива с самого начала, так что, хотя он добавляет еще две строки код, он по-прежнему решает задачу наличия массива в файле констант.
Если у кого-то есть еще предложения или могут быть известны другие C
трюки, оставьте комментарий ниже!