【问题标题】:Objective-c Workaround for running intepretted code用于运行解释代码的 Objective-c 解决方法
【发布时间】:2012-06-13 05:17:01
【问题描述】:

我习惯于在 javascript e.t.c. 等语言中使用 eval()

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

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

【问题讨论】:

    标签: objective-c cocos2d-iphone


    【解决方案1】:

    尝试使用NSStringFromClassNSClassFromString 函数。

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

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

    然后,要使用字典中的正确级别,您可以这样做:

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

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

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

    【讨论】:

    • 漂亮地解释了谢谢,已经实现并运行 :) 我对 Objective-c 很陌生哈哈
    • 无需将类转换为字符串。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2018-05-16
      • 2014-02-06
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多