40 votes

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

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

À partir de méthodes que j'ai utilisé avec plusieurs paramètres d'entrée, chacun a un nom, le long de la lignes de

première:deuxième:troisième:

et regardez comme

- (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 ne vous devez créer un nom comme première:deuxième:troisième ou vous pouvez juste avoir quelque chose comme C++ où vous avez un nom suivi d'une liste de paramètre d'entrée types suivie par le paramètre de nom... si je me souviens bien.

fullName:(NSString, NSString, NSString) fname, mname, lname;

57voto

PengOne Points 33226

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

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

26voto

Paul.s Points 23073

Vous devez avoir les paramètres entrelacée avec la signature de la méthode. C'est ok parce que xcode a complétion de code et il peut vous donner de nice descriptive des noms sur ce que votre méthode est de faire et ce qu'il exige.

par exemple

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

Dans l'exemple ci-dessus, sans même regarder l'API pour UIViewController, vous pouvez obtenir une assez bonne compréhension de la façon dont cette méthode fonctionne et ce qu'il params sont. Il est de bonne pratique pour le nom de vos méthodes pour décrire ce qu'ils font (il peut éliminer la nécessité pour la plupart des commentaires si c'est bien fait).

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

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

Mais ce ne sera pas très clair dans l'utilisation que les paramètres se rapportent à:

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

Donc, vous devriez éviter cela (je l'ai ajouté au cas où vous jamais la voir, et me demande ce qui se passe).

20voto

Caleb Points 72897
 fullName:(NSString, NSString, NSString) fname, mname, lname;
 

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

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

et vous l'appelez comme ça:

 [foo fullName:first :middle :last];
 

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

-2voto

matrinox Points 184

Vous pouvez faire des arguments variables. Cela se voit avec des méthodes de classe comme arrayWithObjects :. Exemple:

 - (NSString *)stringJoiningStrings:(NSString *)firstObject, ... {

    id eachObject;
        va_list argumentList;
        if (firstObject) {
            va_start(argumentList, firstObject);
            while ((eachObject = va_arg(argumentList, id))) {
                [eachObject doSomething];
            }
            va_end(argumentList);

        }
    }
 

Une façon plus privilégiée de faire cela consiste à utiliser un truc que j'ai appris à Ruby. Créez une catégorie NSArray avec une méthode appelée "wrap" qui prend un objet et l'enveloppe dans un tableau ou le renvoie s'il s'agit d'un tableau. Créez ensuite une méthode telle que addStrings: (id) object, enveloppez cet objet et traitez-le comme un tableau. Beaucoup plus propre!

-6voto

Mike Points 72

Je peux penser à une excellente raison d'utiliser NSDictionary pour passer des arguments. Je crois aussi que cela répond à la question.

Vous pouvez placer tous les éléments dans un NSDictionary puis les décompresser. Cela peut être utile si vous avez défini un objet NSObject de persitanceStore auquel vous souhaitez envoyer une liste de paramètres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X