2009-07-12 5 views
4

私はObjective-Cを初めて使い、Matlabで使ったようなevalのステートメントを探しています。Objective-C 2.0にMatlabのevalステートメントのようなものがありますか?

これに慣れていない場合は、文字列を作成してevalという文字列を作成して、それをコード行のように扱います。ここで

は、あなたが3 =変数fooに基づいて、4つのボタンのシリーズの一つの背景色を変更したいの例であり、あなたのボタンは、ボタン2など

NSString* buttonEval = [[NSString alloc] initWithFormat:@"[button%d setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];", foo] 
ボタン1と命名されるだろう

この文字列をコード行と評価する文はありますか?

答えて

6

いいえ; Objective-Cは動的に型指定された言語ですが、JavascriptやPHPなどの言語とは異なり、解釈された言語ではなく、コンパイルされた言語です。

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

を、後であなたがメソッドを呼び出したいUIButtonへのポインタを取得する:

上記の例では、あなたのUIButtonインスタンスへのポインタを格納する配列を使用することができます。

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

compiled languagesの一般的な機能ではありませんが、Objective Cはこれに該当します。これは、ソースコードをCPUが実行できるものに変換するために必要なメカニズムと「インテリジェンス」が、コンパイラに含まれているためです。

8

Objective-C 2.0自体にeval文はありません。しかしながら;いくつかの代替パスがあなたに公開されています。

この特定のケースでは、ほとんどの場合、呼び出しと繰り返しが必要です。 Perspxが暗示したように。

より一般的なケースでは、呼び出しはセレクタから作成され、セレクタは文字列から作成されます。 Objective-Cがコンパイルされた言語であるにもかかわらず、名前を与えられている限り、オブジェクトは追跡できます。のような評価をとすることは可能です。

0

ああ、keep it Short and Simple:スイッチ、if/then節、またはボタンの配列を使用するだけです。

とにかく、Objective-Cの評価ステートメントに関連して本当にクールなものをお望みなら、code injectionをご覧ください。

(ちょうど冗談);)

関連する問題