Sintaxis del método en Objective-C

Resuelto Craig asked hace 15 años • 4 respuestas

¿Alguien puede explicarme la sintaxis de declaración de este método? En esta función, se devuelve el número de filas de UIPickerView (UI de máquina tragamonedas en el iPhone). Según tengo entendido, el método se llama ' pickerView' y devuelve un NSInteger.

Pasa un puntero a UIPickerview llamado ' pickerView'... primero, ¿por qué el método se llama con el mismo nombre que el parámetro?

Luego está el parámetro NSInteger llamado componente que nos dice para qué componente estamos contando las filas. La lógica para decidir cuál está en el cuerpo del método.

Qué es ' numberOfRowsInComponent? Parece describir el valor que devolvemos, pero está en el medio de los parámetros.

- (NSInteger) pickerView:(UIPickerView *)pickerView 
 numberOfRowsInComponent:(NSInteger)component
{
    if (component == kStateComponent)
        return [self.states count];

    return[self.zips count];
}
Craig avatar Mar 26 '09 03:03 Craig
Aceptado

Los métodos Objective-C están diseñados para autodocumentarse y toman prestado de la rica tradición de Smalltalk.

Intentaré explicarte lo que tienes aquí -(NSInteger) pickerView:(UIPickerView*)pickerView numberOfRowsInComponent:(NSInteger)component.

  • - (NSInteger)
    Esta primera parte indica que se trata de un método de instancia de Objective C que devuelve un objeto NSInteger. el -(guión) indica que se trata de un método de instancia+ , donde a indicaría que se trata de un método de clase . El primer valor entre paréntesis es el tipo de retorno del método.

  • pickerView:
    Esta parte es parte del nombre del mensaje . El nombre completo del mensaje en este caso es pickerView:numberOfRowsInComponent:. El tiempo de ejecución de Objective-C toma la información de este método y la envía al receptor indicado. En C puro, esto se vería así
    NSInteger pickerView(UIPickerView* pickerView, NSInteger component). Sin embargo, dado que se trata de Objective-C, se incluye información adicional en el nombre del mensaje.

  • (UIPickerView*)pickerView
    Esta porción es parte de la entrada . La entrada aquí es de tipo UIPickerView*y tiene un nombre de variable local de pickerView.

  • numberOfRowsInComponent:
    Esta parte es la segunda parte del nombre del mensaje . Como puede ver aquí, los nombres de los mensajes se dividen para ayudar a indicar qué información le está pasando al receptor. Por lo tanto, si enviara un mensaje a un objeto myObject con las variables foo y bar, escribiría:
    [myObject pickerView:foo numberOfRowsInComponent:bar];
    en lugar del estilo C++:
    myObject.pickerView(foo, bar);.

  • (NSInteger)component
    Esta es la última parte de la entrada . la entrada aquí es de tipo NSIntegery tiene un nombre de variable local de componente.

locriani avatar Mar 25 '2009 20:03 locriani

En Objective-C, el nombre de un método se compone de todas las partes de la declaración que no son argumentos ni tipos. Por tanto, el nombre de este método sería:

pickerView:numberOfRowsInComponent:

El método sería equivalente a una función de estilo C que tendría el siguiente aspecto:

editar: (con agradecimiento a Jarret Hardie ):

NSInteger pickerViewNumberOfRowsInComponent(UIPickerView * pickerView, NSInteger component)
e.James avatar Mar 25 '2009 20:03 e.James

Agregando a las respuestas anteriores, solo me gustaría decir que los métodos Objective-C (o mensajes si lo prefiere) tienen nombres de parámetros externos e internos .

Entonces en este caso:

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

numberOfRowsInComponentes el nombre externo , el que usarías al llamar a este método desde afuera.

Y componentes el nombre interno del parámetro, el que usas para referirte al parámetro desde dentro del método.

Espero que eso lo aclare un poco.

Karolis avatar Apr 02 '2009 17:04 Karolis

Me parece que las firmas de los métodos Objective-C se parecen más a oraciones. Cada parámetro merece una parte en el nombre del método. Por ejemplo, en C podríamos tener un método ( setPersonData ) para configurar cierta información sobre la persona:

void setPersonData( char* name, int age, float height ) {

y en Objective-C el método sería más descriptivo ( setPersonName:andAge:andHeight: ), como

- (void) setPersonName: (char *)name andAge:(int)age andHeight:(float)height {
wilczarz avatar Nov 11 '2010 19:11 wilczarz