Quelqu'un peut-il m'expliquer cette syntaxe de déclaration de méthode? Dans cette fonction, le nombre de lignes d'un UIPickerView (UI de machine à sous sur l'iPhone) est renvoyé. D'après ce que je comprends, la méthode s'appelle « pickerView
» et renvoie un NSInteger.
Il passe un pointeur vers l'UIPickerview appelé ' pickerView
' ... d'abord, pourquoi la méthode s'appelle-t-elle le même nom que le paramètre?
Ensuite, il y a le paramètre NSInteger appelé component qui nous indique pour quel composant nous comptons les lignes. La logique pour décider lequel est dans le corps de la méthode.
Qu'est-ce que ' numberOfRowsInComponent
? Il semble décrire la valeur que nous retournons, mais c'est au milieu des paramètres.
- (NSInteger) pickerView:(UIPickerView *)pickerView
numberOfRowsInComponent:(NSInteger)component
{
if (component == kStateComponent)
return [self.states count];
return[self.zips count];
}
la source
En Objective-C, le nom d'une méthode est composé de toutes les parties de la déclaration qui ne sont pas des arguments et des types. Le nom de cette méthode serait donc:
La méthode serait équivalente à une fonction de style C qui ressemblerait à ceci:
edit: (avec merci à Jarret Hardie ):
NSInteger pickerViewNumberOfRowsInComponent(UIPickerView * pickerView, NSInteger component)
la source
Ajoutant aux réponses précédentes, je voudrais juste dire que les méthodes Objective-C (ou les messages si vous préférez) ont des noms de paramètres externes et internes .
Donc dans ce cas:
- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
numberOfRowsInComponent
est le nom externe , celui que vous utiliseriez pour appeler cette méthode de l'extérieur.Et
component
est le nom interne du paramètre, celui que vous utilisez pour faire référence au paramètre depuis l'intérieur de la méthode.J'espère que cela clarifie un peu les choses.
la source
Il me semble que les signatures de la méthode Objective-C ressemblent plus à des phrases. Chaque paramètre mérite une partie dans le nom de la méthode. Par exemple, en C, nous pourrions avoir une méthode ( setPersonData ) pour définir des informations sur la personne:
void setPersonData( char* name, int age, float height ) {
et en Objective-C la méthode serait plus descriptive ( setPersonName: andAge: andHeight:) , comme
- (void) setPersonName: (char *)name andAge:(int)age andHeight:(float)height {
la source