Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 712
Aaron Avatar asked Nov 28 '22 15:11

Aaron


2 Answers

This is not a common feature in compiled languages, which Objective C qualifies as. This is because the mechanisms and "intelligence" needed to convert source code into something the CPU can run is contained in the compiler, which is no longer around when the code runs.

like image 67
unwind Avatar answered Dec 19 '22 01:12

unwind


There is no eval statement in Objective-C 2.0 per se; however; there are a few alternate paths open to you.

In this particular case, you most likely want an invocation and an iteration; as alluded to by Perspx.

In the more general case; invocations are created from selectors, and selectors can be created from strings; objects can, so long as they are given a name, be kept track of, and as such, in spite of Objective-C being a compiled language; creating an eval-like function is quite possible.

like image 31
Williham Totland Avatar answered Dec 19 '22 02:12

Williham Totland