1

定数が多いプログラムを作っています。それらをすべて別のクラスに入れることにし、それを必要とするクラスごとにインポートしています。ファイルは次のようになります

// 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 行のコードのみを使用する方がはるかに優れています。これを行う方法を知っている人はいますか?前もって感謝します。

4

1 に答える 1

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"];
于 2009-08-08T03:03:59.727 に答える