2009-08-08 4 views
1

많은 상수를 가진 프로그램을 만들고 있습니다. 나는 그것들을 모두 별도의 클래스에 넣기로 결정했고 그것을 필요로하는 클래스들에 의해 그것을 임포트하려고합니다. 파일은 다음과 유사합니다.Objective-C에서 키 - 값 코딩을 사용하여 상수에 액세스하기

// 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 문 대신 한두 줄의 코드 만 있으면 좋을 것입니다. 누구든지이 일을하는 방법을 알고 있습니까? 미리 감사드립니다.

당신은 적절한 값으로 사전 채울 수
+0

우리는 당신이 상수를 가지고있는 클래스를 볼 수 (또는 이상을 그것의 대표 스 니펫)? – Tim

답변

3

:

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