2009-08-08 5 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文ではなく、1行または2行のコードしか持たない方がよいでしょう。誰もこれを行う方法を知っていますか?前もって感謝します。

+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"]; 
関連する問題