0

我习惯于在 javascript 等语言中使用 eval()

在 cocos2d 中,为了选择关卡,我将“1”或“2”传递给我的 Loadlevel.m 文件,关卡类相应地命名为“LevelOne”和“LevelTwo”,我想创建一个匹配“1”的字典查找" => "LevelOne" 等然后在该字符串上运行 eval 以有效调用 [MyLevel node];

显然我们不能在 IOS 代码中使用 eval ,那我该怎么做呢?

4

2 回答 2

1

尝试使用NSStringFromClassNSClassFromString功能。

具体来说,将类表示为字典中的字符串,例如,

[myDictionary setObject:NSStringFromClass([LevelOne class]) forKey:@"1"]

然后,要使用字典中的正确级别,您可以执行以下操作:

NSString *levelAsString = [myDictionary objectForKey:@"1"];
id node = [NSClassFromString(levelAsString) node]

(我假设+node是一个类方法)

现在,这在 Cocoa 中是一个非常罕见和奇怪的设计。也许如果您对您正在做的事情进行更多解释,我们可以建议可能更好的替代设计选择。

于 2012-06-13T05:28:32.540 回答
1

我不是百分百清楚你在问什么,但你可以将类对象直接存储在字典中,检索它们,并向它们发送消息:

NSDictionary * d = [NSDictionary dictionaryWithObjectsAndKeys:[LevelOne class], @"1", [LevelTwo class], @"2", nil];

Class selectedLevel = [d objectForKey:@"1"];

[selectedLevel node];
于 2012-06-13T05:29:56.677 回答