2009-08-15 13 views
0

実行時にパラメータの値を変更したいのですが、Obj-Cでこれがどのように機能するのか不思議です。Objective-C実行時にメソッドへのパラメータを変更してください

私は 'n'の値が各ループで1ずつ増加するループを持っています。 nが動くと、渡されたパラメータを1だけインクリメントします。

UIViewSubclass *uiViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue]) 
                andPlacement:kPlacement0; 
私が読んで第2引数のようにしたいループを通る

次の時間のように:andPlacement:kPlacement1。 、次に:、および配置:kPlacement2; on ...

私はkPlacementを文字列にしてstringByAppendingStringを作成します:[[NSNumber numberWithInt:n] stringValue]; ?

Obj-C/Cocoaアプローチとは何ですか?

答えて

3

実行時にソースコードを変更したり、変数参照を構成することはできません。 Objective-Cはではなく、動的です。

kPlacementMax通じkPlacement0の値が連続している場合は、直接ステップスルーするforループを使用することができる場合があります

for (MyPlacement placement = kPlacement0; placement += kPlacementIncrement; placement <= kPlacementMax) { 
    UIViewSubclass *instanceOfUIViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue]) 
                     andPlacement:placement]; 
    //Do something with instanceOfUIViewSubclass. 
    [instanceOfUIViewSubclass release]; 
} 

(あなたはkPlacement0に加えてkPlacementIncrementkPlacementMaxを定義する必要がありますなどの定数があります。kPlacement0などの定数が対応する列挙型の名前としてMyPlacementを使用しています)

これらが連続していない場合は、C配列に入れてiterそのアレイ上で食べた:

enum { numPlacements = <#Insert the number of placement constants here#> }; 
MyPlacement placements[numPlacements] = { 
    kPlacement0, 
    kPlacement1, 
    kPlacement2, 
    ⋮ 
} 

for (unsigned i = 0U; i < numPlacements; ++i) { 
    UIViewSubclass *instanceOfUIViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue]) 
                     andPlacement:placements[i]]; 
    //Do something with instanceOfUIViewSubclass. 
    [instanceOfUIViewSubclass release]; 
} 

あなたは数でそれらを参照したいときは、おそらくそれを行う、kPlacement0よりも、わかりやすい名前などを思い付くことができます。あなたが名前でそれらを参照したいときは、彼らに良い名前を付けてください。

+2

より明示的に:あなたが 'suchandsuch1'、' suchandsuch2'などの変数をたくさん持っていたら、おそらく配列を使うつもりです。 – Chuck

関連する問題