41 votes

comment passer des arguments variables à une autre méthode?

J'ai googlé et ai appris à savoir comment utiliser les arguments variables. mais je veux passer mes arguments variables à une autre méthode. im obtenir des erreurs. comment faire ça ?

 -(void) aMethod:(NSString *) a, ... {
  [self anotherMethod:a]; 
  // i m doing this but getting error. how to pass complete vararg to anotherMethod
}
 

54voto

Till Points 20820

Autant que je sache, ObjectiveC (tout comme le C et le C++) ne fournissent pas de vous avec une syntaxe qui permet à ce qui vous directement à l'esprit.

L'habitude solution de contournement consiste à créer deux versions d'une fonction. Celui qui peut être appelé directement à l'aide ... et un autre appelé par d'autres fonctions en passant les paramètres sous la forme d'une va_list.

..
[l'obj aMethod:@"tester cette %d paramètre", 1337);
[l'obj anotherMethod:@"test que %d paramètre", 666);
..

-(void) aMethod:(NSString *)a, ... 
{
 va_list ap;
 va_start(ap, a);

 [auto anotherMethod:un withParameters:ap]; 

va_end(ap);
}

-(void) anotherMethod:(NSString *)a, ...
{
 va_list ap;
 va_start(ap, a);

 [auto anotherMethod:un withParameters:ap]; 

va_end(ap);
}

-(void) anotherMethod:(NSString *)un withParameters:(va_list)valist 
{
 NSLog([[[NSString alloc] initWithFormat:un des arguments:valist] autorelease]);
}

20voto

KennyTM Points 232647

Vous ne pouvez pas passer directement d'arguments variadiques. Mais certaines de ces méthodes offrent une alternative selon laquelle vous pouvez passer un argument va_list , par exemple

 #include <stdarg.h>

-(void)printFormat:(NSString*)format, ... {
   // Won't work:
   //   NSString* str = [NSString stringWithFormat:format];

   va_list vl;
   va_start(vl, format);
   NSString* str = [[[NSString alloc] initWithFormat:format arguments:vl] autorelease];
   va_end(vl);

   printf("%s", [str UTF8String]);
}
 

1voto

Justin Amberson Points 6033

Avez-vous envisagé de configurer vos arguments dans un tableau ou un dictionnaire et de coder de manière conditionnelle?

 -(void) aMethodWithArguments:(NSArray *)arguments {
    for (id *object in arguments) {
        if ([object isKindOfClass:fooClass]) {
            //handler for objects that are foo
            [self anotherMethod:object];
        }
        if ([object isKindOfClass:barClass]) {
            //and so on...
            [self yetAnotherMethod:object];
        }
    }
}
 

-3voto

Convolution Points 1937

Comme ça?

 - (void)methodOne:(NSString *)object {
    NSLog(@"calling method one");
    [self methodTwo:object];
}

- (void)methodTwo:(NSString *)object {
    NSLog(@"Calling set string from first method: %@", object);
}
 

edit: peut-être que ce lien vous aidera?

Coca avec amour: listes d'arguments variables dans le cacao

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