Есть ли способ выделить Objective-C NSArray с объектами, содержащимися в макросе в стиле C? - PullRequest
0 голосов
/ 18 августа 2011

Я хотел бы сделать что-то вроде этого:

NSArray *someArray = [[NSArray alloc] initWithObjects: C_MACRO, nil];

Поскольку часть C_MACRO является внешним файлом, который использует #define для перечисления некоторого числа строк NSSt, поэтому, когда мне нужно изменить строковые объекты, которые заполняют массив, я могу удобно сделать это в одном файле. Пока что это кажется невозможным. Но опять же, я новичок.

Кто-нибудь хочет меня просветить?

Ответы [ 2 ]

5 голосов
/ 18 августа 2011

Нет проблем с этим ... Макрос - это просто замена текста.

/* foo.h */
#define C_MACRO @"foo", @"bar"

/* bar.m */
#import "foo.h"
NSArray * someArray = [ [ NSArray alloc ] initWithObjects: C_MACRO, nil ];

Обратите внимание, что вы можете использовать макросы внутри другого макроса.Итак,

#define FOO_STR @"foo"
#define BAR_STR @"bar"
#define STR_LIST FOO_STR, BAR_STR

Другим способом является размещение ваших строк в файле .m и объявление их как extern в открытом заголовочном файле.Удобно, если уникальные экземпляры одного и того же объекта должны быть общими.

/* foo.h */
extern NSString * const fooStr;
extern NSString * const barStr;

/* foo.m */
NSString * const fooStr = @"foo";
NSString * const BarStr = @"bar";
0 голосов
/ 18 августа 2011

Почему это должен быть макрос?Следующее работает так же хорошо:

NSString *words[] = {@"Hello", @"World!"}; // this can be a global
...
NSArray *array = [NSArray arrayWithObjects:words count:sizeof(words)/sizeof(*words)];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...