我想在 ObjC 中获取一个字符串并对其进行评估,就好像它是代码一样。例如(这些是虚构的函数):
NSString *Cmd=@" if (10>5) NSLog(@"Test"); ";
MyClass.Run(Cmd);
我希望“Test”出现在输出日志中。我搜索并测试了很多代码示例和库,但仍然没有好的结果。
我最终得到了这两个用于运行时编译的库:
1- libClang框架和clang_Cursor_Evaluate函数。
https://www.mikeash.com/pyblog/friday-qa-2014-01-24-introduction-to-libclang.html https://www.mikeash.com/pyblog/friday-qa-2014-01-24-introduction-to-libclang.html
https://github.com/root-project/cling https://github.com/root-project/cling
2- objc-eval 框架。
https://github.com/antipax/objc-eval/blob/master/README.mdown https://github.com/antipax/objc-eval/blob/master/README.mdown
我无法使用 libClang 做任何事情。现在保持原样,但对于第二个,我成功编译了框架并在一个简单的项目中实际使用了它,但仍然没有正确的输出!
#import <Foundation/Foundation.h>
#import "OEEvaluation.h"
void main()
{
Code1:OEEvaluation *evaluation = [OEEvaluation evaluationWithCode:@"retun @\"Hello World!\" ;" delegate:nil];
Code2://OEEvaluation *evaluation = [OEEvaluation evaluationWithCode:@"NSLog(@\"Hello World!\");" delegate:nil];
NSLog([evaluation evaluateSynchronously]);
NSLog(@"Test");
}
Code1 和 Code 2 没有输出:没有(空),没有错误,没有提示..什么也没有。
代码 1 是框架文档中的确切示例。
也许我错了,但我认为我找到的解决方案是我的研究中最接近答案的解决方案。
现在的问题是:
1-我怎样才能实现这个想法(将字符串转换为可执行代码的可执行行)?
2-如何让 objc-eval.framework 工作?