在Objective-C 2.0中有类似Matlab的eval语句吗?

Aar*_*ron 4 iphone objective-c

我是Objective-C的新手,我正在寻找eval像我在Matlab中使用过的声明.

如果您对此不熟悉,可以构建一个字符串,然后构建一个eval字符串,将其视为一行代码.

下面是一个示例,您希望根据变量foo = 3更改一系列4个按钮之一的背景颜色,并将按钮命名为button1,button2等.

NSString* buttonEval = [[NSString alloc] initWithFormat:@"[button%d setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];", foo]
Run Code Online (Sandbox Code Playgroud)

是否有一个声明将对此字符串进行评估,就像它是一行代码一样?

unw*_*ind 14

这不是编译语言的常见功能,Objective C符合条件.这是因为将源代码转换为CPU可以运行的东西所需的机制和"智能"包含在编译器中,当代码运行时,它不再存在.


Wil*_*and 8

Objective-C 2.0本身没有eval语句; 然而; 还有一些替代路径可供您使用.

在这种特殊情况下,您很可能需要调用和迭代; 正如Perspx所暗示的那样.

在更一般的情况下; 调用是从选择器创建的,选择器可以从字符串创建; 尽管Objective-C是一种编译语言,但是只要它们被赋予了名称,它们就可以被跟踪,并且因此,它们可以被跟踪.创建一个类似 eval的函数是完全可能的.


Ale*_*ski 6

没有; 虽然Objective-C是一种动态类型语言,但它仍然是一种编译语言,而不是像Javascript或PHP这样的语言,不像解释语言.

对于上面的示例,您可以使用数组来存储指向UIButton实例的指针:

buttonArray = [[NSMutableArray alloc] init];
...
UIButton *aButton; //Reference to a UIButton instance
[buttonArray addObject:aButton];
Run Code Online (Sandbox Code Playgroud)

然后检索指向UIButton要调用方法的指针.

[[buttonArray objectAtIndex:foo] setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)