web-dev-qa-db-fra.com

Méthode avec plusieurs paramètres d'entrée

Je comprends comment créer mes propres méthodes qui acceptent les paramètres d'entrée dans objective-c mais je n'ai jamais réellement créé une méthode avec plus d'un paramètre d'entrée!

Parmi les méthodes que j'ai utilisées avec plusieurs paramètres d'entrée, chacune a un nom le long des lignes de

premier: deuxième: troisième:

et ressemble

- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;

ma question est lors de la création de votre propre méthode avec plusieurs paramètres d'entrée devez-vous créer un nom comme first: second: third ou pouvez-vous simplement avoir quelque chose comme C++ où vous avez le seul nom suivi d'une liste de types de paramètres d'entrée suivis de la noms de paramètres ... si je me souviens bien.

fullName:(NSString, NSString, NSString) fname, mname, lname;
40
C.Johns

Non. Une méthode doit avoir le format que vous avez décrit:

- (void)first:(NSString *)fname second:(NSString *)mname third:(NSString *)lname;
57
PengOne

Vous devez avoir les paramètres entrelacés avec la signature de la méthode. C'est ok parce que xcode a un code complet et il peut vous donner de beaux noms descriptifs sur ce que fait votre méthode et ce qu'elle nécessite.

par exemple.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

Dans l'exemple ci-dessus sans même regarder l'API pour UIViewController, vous pouvez avoir une assez bonne compréhension du fonctionnement de cette méthode et de ses paramètres. C'est une bonne pratique de bien nommer vos méthodes pour décrire ce qu'elles font (cela peut éliminer le besoin de la plupart des commentaires si elles sont bien faites).

Vous pouvez bien sûr voir une méthode écrite comme ceci

- (void)myMethodThatAcceptsARectangle:(float)x :(float)y :(float)w :(float)h;

Mais cela ne sera pas très clair lors de l'utilisation de ce à quoi les paramètres se rapportent:

[self myMethodThatAcceptsARectangle:1.0f :1.0f :1.0f :1.0f];

Vous devez donc éviter cela (j'ai ajouté que vous risqueriez de le voir et de vous demander ce qui se passe).

26
Paul.s
fullName:(NSString, NSString, NSString) fname, mname, lname;

Oui, vous pouvez faire quelque chose comme ça. Cela ressemblerait plutôt à ceci:

-(void)fullName:(NSString*)fname :(NSString*)mname :(NSString*)lname

et vous l'appeleriez comme ceci:

[foo fullName:first :middle :last];

Cela va largement à l'encontre du point des noms de méthode d'Objective-C, cependant, et la principale raison de faire quelque chose comme ça est d'enregistrer votre aversion pour la convention Objective-C normale, ou peut-être de vous lancer dans le projet sur lequel vous travaillez. .

20
Caleb

Une autre option pourrait être les paramètres variadiques . Ils sont utilisés pour fournir une quantité variable de paramètres, même si vous n'avez pas de nom sur chacun d'eux. par exemple.

[NSString stringWithFormat:@"My name is %@ %@", @"John", @"Doe"];

Ce serait quelque chose comme ceci:

- (void)names:(NSString *)names, ...;

Implémentation , informations supplémentaires

3
Iree

Voici un exemple simple de méthode avec paramètres.

- (void)methodName:(NSString *)parameterOne methodNameContinues:(NSString *)parameterTwo;

Par exemple,

-(void)showAlertMsg:(NSString *)message withTitle:(NSString *)title;

Ici vous pouvez voir, nous avons un préfixe "withTitle" pour le deuxième paramètre. Nous devons procéder de même pour les autres paramètres.

1