Objective-c – Is there something like Matlab’s eval statement in Objective-C 2.0


I am new to Objective-C and I am looking for an eval statement like I have used in Matlab.

If you are not familiar with this, you can build a character string and then eval that string, which treats it like it is a line of code.

Here is a example where you would want to change the background color of one of a series of 4 buttons based on a variable foo which = 3 and you buttons would be named button1, button2 etc.

NSString* buttonEval = [[NSString alloc] initWithFormat:@"[button%d setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];", foo]

Is there a statement the will evaluate this string as if it was a line of code?

Best Solution

No; although Objective-C is a dynamically typed language, it is still a compiled language, and not an interpreted one, unlike a language such as Javascript or PHP, for example.

For the above example, you could use an array to store pointers to your UIButton instances:

buttonArray = [[NSMutableArray alloc] init];
UIButton *aButton; //Reference to a UIButton instance
[buttonArray addObject:aButton];

And later retrieve a pointer to the UIButton that you want to call the method on.

[[buttonArray objectAtIndex:foo] setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
Related Question