2012-12-25 108 views
-2

我想要做這樣的事情:使變量名變量(Objective-C的)

.H

LocalRoom* zone1; 
LocalRoom* zone2; 
LocalRoom* zone3; 
LocalRoom* zone4; 
etc.... 

.M

NSString *number = 1; 
NSString *variable = [NSString stringWithFormat: @"zone%@", number] 
[[variable variableValue] broadcastChatMessage:redStringPrefix fromUser:@"server"]; 

爭相模仿:

[zone1 broadcastChatMessage:redStringPrefix fromUser:@"server"]; 

我該怎麼做?可能嗎?

+0

如果您需要命名值,爲什麼不使用'NSMutableDictionary'? – 2012-12-25 18:18:38

+0

使用那種類型的字典 –

+0

或者你可以使用obj-c/runtime .... –

回答

3
@property(strong) NSMutableDictionary *zones; 

-(id)init { 
    .... 
    _zones = [[NSMutableDictionary alloc] init]; 
    .... 
} 

aZone = [_zones objectForKey: [NSString stringWithFormat:@"zone%d", someZoneNumber]]; 

...等...

3

您可以使用Key-Value Coding做類似的事情。你會寫

[[self valueForKey:variable] broadcastChatMessage:redStringPrefix fromUser:@"server"]; 

而不是

[[variable variableValue] broadcastChatMessage:redStringPrefix fromUser:@"server"]; 

這當然需要zone1zone2等對self是實例變量(或屬性)。

+2

這將工作,但我會建議反對KVC與只使用NSMutableDictionary。 – bbum

6

給出的名字,如「ZONE1」,「2區」等等,我會做一個數組,而不是一本字典。無論哪種方式,這些不應該是單獨的變量。