2010-01-04 11 views
13

Mi chiedo solo se è possibile restituire due argomenti in un metodo obiettivo c, ad esempio mi piacerebbe restituire una coordinata cartesiana (x, y), fondamentalmente due inte. è l'unico modo per farlo creando una classe e restituendo un'istanza? C'è un altro modo a cui non sto pensando, una specie di principiante qui.Puoi restituire due argomenti in ogg-c?

(aiuto sintattica sarebbe anche apprezzato.)

Grazie,

Nick

risposta

32

È possibile restituire un solo valore da una funzione (proprio come C), ma il valore può essere qualsiasi cosa, inclusa una struttura. E dal momento che è possibile restituire una struttura per valore, è possibile definire una funzione come questa (per prendere in prestito il tuo esempio):

-(NSPoint)scalePoint:(NSPoint)pt by:(float)scale 
{ 
    return NSMakePoint(pt.x*scale, pt.y*scale); 
} 

Questo è solo davvero appropriato per i piccoli/semplici strutture.

Se si desidera tornare più di una nuova oggetto, la funzione dovrebbe prendere puntatori al puntatore all'oggetto, in tal modo:

-(void)mungeFirst:(NSString**)stringOne andSecond:(NSString**)stringTwo 
{ 
    *stringOne = [NSString stringWithString:@"foo"]; 
    *stringTwo = [NSString stringWithString:@"baz"]; 
} 
+4

E ora con l'introduzione di Swift, è possibile restituire più argomenti dalle funzioni usando tuple. Vedi [The Swift Programming Language] (https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/index.html) per i dettagli. – gavinb

+0

In Objective C, qual è la sintassi per passare i puntatori di primati? Come BOOL o int. Pensavo di poter rimuovere solo una stella, ma quella non sembra essere l'intera storia che speravo. –

+0

@RyanPoolos per i tipi primitivi, è lo stesso di C. Basta passare la variabile per riferimento (ad esempio 'calc (int a, int b, int * c)') e aggiorna il valore nel corpo con '* c = a + b; '(per esempio). – gavinb

2

Non potreste fare un NSArray per questo?

return [NSArray arrayWithObjects:coorX, coorY, nil]; 
+2

I dizionari funzionano meglio, perché non devi preoccuparti dell'ordine nello stesso modo in cui esegui un array. –

+0

Sì, di solito. Immagino di concentrarmi troppo sull'esempio dato dall'OP, poiché le coordinate sono sempre (* x *, * y *). –

+0

Grazie a tutti per l'intuizione, questo ha senso. Sto passando un sacco di tempo cercando di capire questo algoritmo su cui sto lavorando. Grazie, Nick – nickthedude

3

è possibile tornare direttamente un valore e restituire loro da riferimento, mostrato in gs's answer, o creare un tipo di struct e restituirlo. Ad esempio, Cocoa include già un tipo per identificare i punti su un piano 2D, NSPoint.

1

Si consiglia di restituire un NSDictionary, all'interno del Dizionario è possibile memorizzare e inviare qualsiasi tipo di oggetto e qualsiasi numero di variabili.

-(NSDictionary*)calculateWith:(id)arg 
{ 
NSDictionary *urDictionary [email protected]{@"key1":value1,@"Key2":value2,.....}; 
return urDictionary; 
} 
Problemi correlati