/ / Dostęp do stałych przy użyciu kodowania wartości kluczowej w Objective-C - cel-c, zmienne, stałe, kodowanie wartości klucz-wartość

Dostęp do stałych za pomocą kodowania wartości kluczowej w Objective-C - cel-c, zmienne, stałe, kodowanie wartości klucz-wartość

Robię program, który ma wiele stałych.Zaczynałem umieścić je wszystkie w osobnej klasie i jestem importowanie go przez klasy, które jej potrzebują. Pliki wyglądają podobnie do tego

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

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

Próbuję uzyskać do nich dostęp za pomocą kodowania klucz-wartość, czego dotychczas nie próbowałem.

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

Ale mogę zrobić co następuje i działa dobrze.

id object = baseCostForBuilding;

Może się to wydawać bezcelowe, ale mam dużozmienne, które muszą kończyć się w "CostForBuilding", a funkcja, której potrzebuję, dostaje tylko pierwszą część ciągu. Przykład: "base", "max", "intermediate" itd. Następnie zostanie połączony z "CostForBuilding" lub czymś innym, aby uzyskać nazwę zmiennej.

Jeśli jest to możliwe, lepiej byłoby mieć tylko jeden lub dwa wiersze kodu zamiast wielu instrukcji if, aby uzyskać dostęp do właściwej zmiennej. Czy ktoś wie, jak to zrobić? Z góry dziękuję.

Odpowiedzi:

3 dla odpowiedzi № 1

Możesz wypełnić słownik odpowiednimi wartościami:

- (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];
}

Które można następnie użyć w następujący sposób:

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