2010-02-17 13 views
7

In PHP e in JavaScript è possibile utilizzare dinamicamente una variabile utilizzando un'altra variabile come parte del suo nome. Non voglio usare un array come parte della soluzione. Questo obiettivo può essere raggiunto nell'obiettivo C? Mi piacerebbe fare qualcosa di simile:Equivalente C equivalente a "Variabili variabili" di PHP

for (int i=1; i<6; i++) { 
     if([appRecord.answer(i) length] != 0){ 
      self.textView.answer(i)ViewSingle.text = appRecord.answer(i); 
     } 
} 
+2

Stessa domanda: http://stackoverflow.com/questions/2231783/create-multiple-variables-based-on-an-int-count/2231839#2231839 Non dicendo che ti piacerà la risposta, ma lì è. Usa un array. – Chuck

+0

Penso che le domande siano simili ma non uguali. La risposta è la stessa anche se, ovviamente. –

+0

Come potrebbe questa domanda essere un duplicato di un'altra domanda che è stata posta più di un anno dopo questa? Oh moderatori ... –

risposta

21

Risposta breve: No.

Risposta lunga: Una specie.

  1. È possibile utilizzare un array, memorizzare le variabili in esso e indicizzarvi.
  2. Come il numero 1, se gli oggetti sono in realtà elementi dell'interfaccia utente e non si desidera un intero gruppo di IBOutlets, utilizzare invece un IBOutletCollection.
  3. È possibile utilizzare un dizionario, memorizzare le variabili come valori e cercarli per chiave.
  4. È possibile dichiarare tutte le variabili come @property e quindi utilizzare [self valueForKey:] per cercarle per nome.
  5. È possibile creare il nome di ivar come stringa e quindi utilizzare qualcosa come object_getInstanceVariable() per recuperare direttamente il valore (questo è simile al # 3, tranne che non è necessario dichiararlo come @property). Questo è eccessivamente complicato e di solito è un martello molto più grande di quello che effettivamente ti servirà.
  6. Se si tratta di viste, è possibile assegnare ciascuna vista a un tag univoco e quindi recuperarla tramite [superview viewWithTag:aTag]. Non consiglio di utilizzare questo approccio.

MODIFICA: si noti che questo funziona solo con le variabili di istanza. Questo non funziona con variabili globali/statiche.

+1

Wow, [self valueForKey:] era esattamente ciò di cui avevo bisogno poiché tutte le variabili di cui avevo bisogno erano già state dichiarate usando @property. object_getInstanceVariable potrebbe funzionare anche, ma non ne sono ancora sicuro. Hai offerto la risposta migliore su questo argomento su Internet. –

+0

@ Cirrostratus: felice di aiutare. Userei 'object_getInstanceVariable()' come seconda o terza opzione. 'valueForKey:' è probabilmente il modo migliore per andare. –

0

No. Ma posso darvi un tag per la vista e utilizzare -viewWithTag:.