Конвертировать NSString в имя константы - PullRequest
1 голос
/ 04 апреля 2011

У меня есть несколько констант, объявленных так:

#define kConstant0  @"Cow"
#define kConstant1  @"Horse"
#define kConstant2  @"Zebra"

В другом месте кода я пытаюсь извлечь значение константы, добавив целое число к строковому имени константы:

int myInt = 1; // (Actual intValue Pulled From Elsewhere)
myLabel.text = [@"kConstant" stringByAppendingString:[NSString stringWithFormat:@"%i",myInt]];

Но, конечно, это возвращает:

myLabel.text = @"kConstant1";

Когда я хочу его вернуть:

myLabel.text = @"Horse";

Я не могу понять, как преобразовать NSString @ "kConstant1"в имя константы kConstant1.

Любая помощь приветствуется.LQ

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

Ответ - избегать #defines для определения констант в целом.Вместо этого используйте константу NSString следующим образом:

NSString * const constant1 = @"Cow";

Большим преимуществом является то, что теперь константа имеет тип и намного лучше в отношении безопасности типов.

2 голосов
/ 04 апреля 2011

Вы не можете сделать это автоматически. Вы должны сохранить отображение в NSDictionary, например,

@implementation MyClass
static NSDictionary* constants;
+(void)initialize {
  constants = [[NSDictionary alloc] initWithObjectsAndKeys:
                                     @"kConstant0", @"Cow",
                                     @"kConstant1", @"Horse", ...,
                                     nil];
}
...

NSString* constantName = [kConstant stringByAppendingString:...];
myLabel.text = [constants objectForKey:constantName];

Если все эти константы имеют форму kConstantN, лучше просто создать массив.

static NSString* kConstants[] = {@"Cow", @"Horse", @"Zebra", ...};
...

myLabel.text = kConstants[i];
...