我习惯于在 javascript 等语言中使用 eval()
在 cocos2d 中,为了选择关卡,我将“1”或“2”传递给我的 Loadlevel.m 文件,关卡类相应地命名为“LevelOne”和“LevelTwo”,我想创建一个匹配“1”的字典查找" => "LevelOne" 等然后在该字符串上运行 eval 以有效调用 [MyLevel node];
显然我们不能在 IOS 代码中使用 eval ,那我该怎么做呢?
我习惯于在 javascript 等语言中使用 eval()
在 cocos2d 中,为了选择关卡,我将“1”或“2”传递给我的 Loadlevel.m 文件,关卡类相应地命名为“LevelOne”和“LevelTwo”,我想创建一个匹配“1”的字典查找" => "LevelOne" 等然后在该字符串上运行 eval 以有效调用 [MyLevel node];
显然我们不能在 IOS 代码中使用 eval ,那我该怎么做呢?
尝试使用NSStringFromClass
和NSClassFromString
功能。
具体来说,将类表示为字典中的字符串,例如,
[myDictionary setObject:NSStringFromClass([LevelOne class]) forKey:@"1"]
然后,要使用字典中的正确级别,您可以执行以下操作:
NSString *levelAsString = [myDictionary objectForKey:@"1"];
id node = [NSClassFromString(levelAsString) node]
(我假设+node
是一个类方法)
现在,这在 Cocoa 中是一个非常罕见和奇怪的设计。也许如果您对您正在做的事情进行更多解释,我们可以建议可能更好的替代设计选择。
我不是百分百清楚你在问什么,但你可以将类对象直接存储在字典中,检索它们,并向它们发送消息:
NSDictionary * d = [NSDictionary dictionaryWithObjectsAndKeys:[LevelOne class], @"1", [LevelTwo class], @"2", nil];
Class selectedLevel = [d objectForKey:@"1"];
[selectedLevel node];