Доступ к константам с использованием кодирования значения ключа в Objective-C - PullRequest
1 голос
/ 08 августа 2009

Я делаю программу, которая имеет много констант.Я решил поместить их все в отдельный класс и импортирую его по классам, которые в этом нуждаются.Файлы выглядят примерно так:

// Constants.h
extern const int baseCostForBuilding;
extern const int maxCostForBuilding;
// etc

// Constants.m
const int baseCostForBuilding = 400;
const int maxCostForBuilding = 1000;
// etc

Я пытаюсь получить к ним доступ с помощью кодирования значения ключа.То, что я пробовал до сих пор, не сработало.

id object = [self valueForKey:@"baseCostForBuilding"];

Но я могу сделать следующее, и это прекрасно работает.

id object = baseCostForBuilding;

Это может показаться бессмысленным, но у меня многопеременных, которые должны заканчиваться на «CostForBuilding», а функция, в которой я нуждаюсь, получает только первую часть строки.Например, «base», «max», «Intermediate» и т. Д. Затем он объединит его с «CostForBuilding» или чем-то еще, чтобы получить имя переменной.

Если это возможно, это будет намного лучшеиметь только одну или две строки кода вместо нескольких операторов if для доступа к правильной переменной.Кто-нибудь знает способ сделать это?Заранее спасибо.

1 Ответ

3 голосов
/ 08 августа 2009

Вы можете заполнить словарь соответствующими значениями:

- (id)init
{
    ...
    buildingCosts = [[NSDictionary alloc] initWithObjectsAndKeys:
                      [NSNumber numberWithInt:100], @"base",
                      [NSNumber numberWithInt:200], @"max",
                      ...,
                     nil];
    ...
}

- (int)buildingCostForKey:(NSString *)key
{
    return [(NSNumber *)[buildingCosts objectForKey:key] intValue];
}

- (void)dealloc
{
    [buildingCosts release];
}

Что вы могли бы затем использовать следующим образом:

int baseCost = [myClass buildingCostForKey:@"base"];
...