2009-04-06 24 views
155

He leído varios artículos sobre la sintaxis del método Objective-C, pero supongo que no entiendo varios nombres para un método.¿Cómo paso múltiples parámetros en Objective-C?

estoy tratando de crear un método llamado getBusStops con NSString y NSTimeInterval parámetros y un tipo de retorno de NSMutableArray. Así es como he construido el método, pero, obviamente, obtiene errores en tiempo de ejecución:

- (NSMutableArray *)getBusStops:(NSString *)busStop 
           (NSTimeInterval *)timeInterval; 

vi otro ejemplo, con un método:

-(NSInteger)pickerView:(UIPickerView *)pickerView 
      numberOfRowsInComponent:(NSInteger)component 

No entiendo por qué este método tiene un nombre de método para cada parámetro. ¿Debo hacer lo mismo con algo como:

- (NSMutableArray *)getBusStops:(NSString *)busStop 
         forTime:(NSTimeInterval *)timeInterval 

Respuesta

102

de Objective-C no tiene parámetros con nombre, así que todo en el lado izquierdo de una de colon es parte del nombre del método. Por ejemplo,

getBusStops: forTime: 

es el nombre del método. El nombre está dividido por lo que puede ser más descriptivo. Simplemente puede nombrar su método

getBusStops: : 

pero eso no le dice mucho sobre el segundo parámetro.

137

Debe delimitar cada nombre de parámetro con un ":" como mínimo. Técnicamente, el nombre es opcional, pero se recomienda para su legibilidad. Así se podría escribir:

- (NSMutableArray*)getBusStops:(NSString*)busStop :(NSSTimeInterval*)timeInterval; 

o lo que se sugiere:

- (NSMutableArray*)getBusStops:(NSString*)busStop forTime:(NSSTimeInterval*)timeInterval; 
+13

1: argumentos de la función de Objective-C son, en efecto posicional, que no se citan, por lo que la etiqueta es opcional y para el consumo humano. –

61

Sí; la sintaxis del método Objective-C es así por un par de razones; uno de estos es para que quede claro cuáles son los parámetros que está especificando. Por ejemplo, si va a agregar un objeto a un NSMutableArray en un determinado índice, que lo haría con el método:

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index; 

Este método se llama insertObject:atIndex: y es evidente que un objeto se inserta en una especificada índice.

En la práctica, agregando una cadena "¡Hola, mundo!" en el índice 5 de un NSMutableArray llamado array sería llamado como sigue:

NSString *obj = @"Hello, World!"; 
int index = 5; 

[array insertObject:obj atIndex:index]; 

Esto también reduce la ambigüedad entre el orden de los parámetros del método, asegurando que pasa el parámetro objeto primero, entonces el parámetro de índice. Esto se vuelve más útil cuando se usan funciones que toman una gran cantidad de argumentos y reduce el error al pasar los argumentos.

Además, la convención de nomenclatura de métodos es tal porque Objective-C no admite la sobrecarga; sin embargo, si desea escribir un método que realiza el mismo trabajo pero toma diferentes tipos de datos, esto puede lograrse; tomar, por ejemplo, la clase NSNumber; esto tiene varios métodos de creación de objetos, incluyendo:

  • + (id)numberWithBool:(BOOL)value;
  • + (id)numberWithFloat:(float)value;
  • + (id)numberWithDouble:(double)value;

En un lenguaje como C++, sólo tendría que sobrecargar el método del número para permitir diferentes tipos de datos a pasar como el argumento; sin embargo, en Objective-C, esta sintaxis permite implementar varias variantes diferentes de la misma función, cambiando el nombre del método para cada variante de la función.

+0

son los nombres de parámetros necesarios durante la llamada al método (envío de mensajes) si el nombre de la función incluye nombres de parámetros? – Naveen

23

El texto antes de cada parámetro es parte del nombre del método. Según su ejemplo, el nombre del método es en realidad

-getBusStops:forTime: 

Cada uno: representa un argumento. En una llamada a método, el nombre del método se divide en: s y los argumentos aparecen después de: s. p.ej.

[getBusStops: arg1 forTime: arg2] 
+3

Creo que olvidó agregar el nombre del método. –

4

para crear método:

-(void)mymethods:(NSString *)aCont withsecond:(NSString *)a-second { } 

para la llamada al método:

[mymethod:self.contoCorrente withsecond:self.asecond]; 
-2
(int) add: (int) numberOne plus: (int) numberTwo ; 
(returnType) functionPrimaryName : (returnTypeOfArgumentOne) argumentName functionSecondaryNa 

mí:

(returnTypeOfSecontArgument) secondArgumentName ; 

como en OTH er lenguas que utilizamos siguiente sintaxis vacío add(int one, int second) pero manera de asignar los argumentos en OBJ_c es diferente como se describe anteriormente

Cuestiones relacionadas