2012-12-25 105 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区”等等,我会做一个数组,而不是一本字典。无论哪种方式,这些不应该是单独的变量。