2012-08-02 12 views
9

Ich habe eine seltsam für mich Weg gefunden:Objective C. Weird Syntax

-(void)methodName:(NSString *)str, int i 
{ 
    NSLog(@"str = %@, int = %d", str, i); 
} 

kann ich diese Methode wie folgt aufrufen:

[self methodName:@"stringExample", 99]; 

Und es würde gut funktionieren.

Meine Frage ist, wann sollte ich eine solche Syntax verwenden. Gibt es einen Unterschied zwischen der üblichen Erklärung?

Antwort

6

Wie beschrieben ist here, diese Parameter sind optional:

Methoden, die eine variable Anzahl von Parametern nehmen sind ebenfalls möglich, obwohl sie einige sind was selten. Zusätzliche Parameter werden nach dem Ende des Methodennamens durch Kommas getrennt. (Im Gegensatz zu Doppelpunkte, die Kommata nicht als Teil des Namens.) In dem folgenden Beispiel wird die imaginäre makeGroup: Verfahren ist eines erforderlichen Parameter übergeben (Gruppe) und drei Parameter, die optional sind:

[receiver makeGroup:group, memberOne, memberTwo, memberThree];

Also ja, die Deklaration unterscheidet sich von der üblichen Deklaration. Ich kann diese Art der Deklaration nicht anders als mit einer varargs-Methode verwenden, bei der der optionale Parameter als ... deklariert ist.

1

Das Ziel bei der Deklaration von Methoden wie: -(void)methodName:(NSString *)str yourInt:(int) i{...} dient dazu, es lesbarer zu machen. Nach llvm 4.0 erklärt Strings, Arrays, Wörterbücher .. können wie andere C Sprachen .. Zum Beispiel behandelt werden, sind die beiden Erklärungen unter wahr:

//old style 
array = [nsarray arraywithobjects:a, b, c, nil]; 
dict = [nsdictionary dictionarywithobjects:@[o1, o2, o3] 
forkeys:@[k1, k2, k3]]; 
number = [nsnumber numberwithchar:'x']; 
number = [nsnumber numberwithint:12345]; 
//new style 
array = @[ a, b, c ]; 
dict = @{ k1 : o1, k2 : o2, k3 : o3 }; 
number = @'x'; 
number = @12345; 

Ressource aus einem türkischen Forum here