2009-07-12 6 views
4

Ich bin neu in Objective-C und ich bin auf der Suche nach einer eval Aussage, wie ich sie in Matlab verwendet habe.Gibt es so etwas wie Matlabs Eval-Anweisung in Objective-C 2.0?

Wenn Sie nicht vertraut sind, können Sie eine Zeichenfolge erstellen und dann eval diese Zeichenfolge, die es behandelt, als ob es eine Zeile Code ist.

Hier ist ein Beispiel, in dem Sie die Hintergrundfarbe eines von einer Reihe von 4 Tasten auf einer Variablen foo Basis zu ändern, die 3 = und Sie Tasten würden namens button1, button2 usw.

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

Gibt es eine Aussage, die diese Zeichenfolge auswertet, als ob es eine Codezeile wäre?

Antwort

6

Nein; obwohl Objective-C eine dynamisch typisierte Sprache ist, ist es immer noch eine kompilierte Sprache und keine interpretierte Sprache, im Gegensatz zu einer Sprache wie zum Beispiel Javascript oder PHP.

Für das obige Beispiel könnte man ein Array speichern Zeiger auf Ihre UIButton Instanzen verwenden:

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

Und später einen Zeiger auf die UIButton abrufen, die Sie auf die Methode aufgerufen werden soll.

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

Dies ist kein gemeinsames Merkmal in compiled languages, das Objective C als qualifiziert. Dies liegt daran, dass die Mechanismen und die "Intelligenz", die benötigt werden, um Quellcode in etwas umzuwandeln, das die CPU ausführen kann, in dem Compiler enthalten ist, der nicht mehr vorhanden ist, wenn der Code ausgeführt wird.

8

Es gibt keine eval Aussage in Objective-C 2.0 per se; jedoch; Es gibt ein paar alternative Wege für Sie.

In diesem speziellen Fall möchten Sie wahrscheinlich einen Aufruf und eine Iteration; wie von Perspx angedeutet.

Im allgemeineren Fall; Aufrufe werden von Selektoren erstellt, und Selektoren können aus Zeichenfolgen erstellt werden. Objekte können, solange sie einen Namen erhalten, verfolgt werden und als solche, obwohl Objective-C eine kompilierte Sprache ist; Erstellen einer eval-wie Funktion ist durchaus möglich.

0

Oh gut, keep it Short and Simple: Verwenden Sie einfach einen Schalter, eine if/then-Klausel oder ein Array von Tasten.

Wie auch immer, wenn Sie etwas wirklich cool zu Eval-Anweisungen in Objective-C beziehen wollen, werfen Sie einen Blick auf code injection.

(nur Spaß);)

Verwandte Themen