2012-08-02 18 views
9

he encontrado un extraño para mí forma de declarar un método en Objective C.Objetivo C. sintaxis extraño

declaración de método en el archivo .h:

-(void)methodName:(NSString *)str, int i; 

implementación del método en el archivo .m:

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

puedo llamar a este método como este:

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

Y funcionaría bien.

Mi pregunta es cuándo debo usar tal sintaxis. ¿Hay alguna diferencia entre esto y la declaración habitual?

Respuesta

6

Como se describió here, estos parámetros son opcionales :

métodos que toman un número variable de parámetros también son posibles, pesar de que son un poco qué raro. Los parámetros adicionales están separados por comas después del final del nombre del método. (A diferencia de dos puntos, las comas no son parte considerada del nombre.) En el siguiente ejemplo, el imaginario makeGroup: método se pasa un parámetro requerido (grupo) y tres parámetros que son opcionales:

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

Así que sí, la declaración es diferente a la declaración habitual. No puedo encontrar ningún uso regular de este tipo de declaración que no sea el método varargs, donde el parámetro opcional se declara como ....

1

El objetivo al declarar métodos como: -(void)methodName:(NSString *)str yourInt:(int) i{...} es para hacerlo más legible. Después llvm 4.0 cadenas que declaran, matrices, diccionarios .. pueden ser manejados como otros lenguajes C .. Por ejemplo, los dos de las declaraciones a continuación son verdaderas:

//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; 

de recursos de un foro de Turquía es here