2011-07-04 13 views
7

Ho una funzione in questo modo:Passando nuova struct come parametro di

- (void)addBalloon:(COLOR)color:(VELOCITY)velocity:(LOCATION)location 

dove il colore è un enum, e la velocità e la posizione sono le strutture definite in un file di intestazione costanti ..

velocità e LOCATION sia memorizzare due int, xey.

Quando si chiama questo metodo, lo chiamerei in questo modo:

VELOCITY vel; 
LOCATION loc; 

vel.x = 100.0; 
vel.y = 0.0; 

loc.x = 10.0; 
loc.y = 10.0; 

[self addBalloon:Red:vel:loc]; 

Ma per me, questo sembra disorganizzato. Vorrei chiamare la funzione direttamente su una riga mentre creo la struttura sulla linea ..

Ecco la mia domanda: non sono sicuro se questo può essere fatto usando #define .. ma se non può .. è l'unica altra opzione valida che crea una funzione che restituisce VELOCITY o LOCATION e prende gli input xe y?

mi piacerebbe fare qualcosa di simile al seguente:

[self addBalloon:Red:VELOCITY(100.0, 0.0):LOCATION(10.0, 10.0)]; 
+0

tenere a portata di testo tra il due punti. Guarda come non hai nessuna parte del nome del metodo prima di ogni due punti? No, dove nell'SDK succede questo, quindi non dovresti farlo da solo. (http://i.stack.imgur.com/DCu5T.png) –

risposta

7

È possibile utilizzare la sintassi C99 per inizializzatori designati:

[self addBalloon:Red:(VELOCITY){100.0, 0.0}:(LOCATION){10.0, 10.0}]; 

o

[self addBalloon:Red:(VELOCITY){.x=100.0, .y=0.0}:(LOCATION){.x=10.0, .y=10.0}]; 
+1

wow grazie, è perfetto. – Dalisto1

Problemi correlati