web-dev-qa-db-fra.com

Fonction Objective-C avec paramètres par défaut?

Doublons possibles:
Arguments optionnels dans Objective-C 2.0?
valeur d'argument par défaut d'Objective-C

J'écris une fonction C dans Objective-C. Je veux un valeur par défaut pour mon dernier paramètre.

J'ai essayé:

foo(int a, int b, int c = 0);

mais c'est C++.

J'ai aussi essayé:

foo(int a, int b, int c)
{
    ...
}

foo(int a, int b)
{
   foo(a, b, 0);
}

Mais c'est aussi C++.

Existe-t-il un moyen de le faire dans Objective-C à la place?

37
Brian Postow

Il n'y a pas de paramètres par défaut dans ObjC.

Vous pouvez cependant créer 2 méthodes:

-(void)fooWithA:(int)a b:(int)b c:(int)c {
  ...
}
-(void)fooWithA:(int)a b:(int)b {
  [self fooWithA:a b:b c:0];
}

Pour C: il n'y a rien de spécial ajouté au sous-ensemble C en utilisant ObjC. Tout ce qui ne peut pas être fait en C pur ne peut pas non plus être fait en compilant en ObjC. Cela signifie que vous ne pouvez pas avoir de paramètres par défaut, ni surcharger une fonction. Créez plutôt 2 fonctions.

101
kennytm

Non, objective-c ne prend pas en charge les paramètres par défaut. Voir question similaire

4
Vladimir

Pour une fonction C - non. Pour une méthode de classe Objective C - oui, vous ne faites que deux méthodes, l'une d'elles un paramètre court, appelant l'autre méthode.

Ou vous pouvez renommer vos sources en .mm et les fonctions C deviennent par magie C++.

1
Seva Alekseyev

Vous pouvez écrire une fonction C avec une liste d'arguments de longueur variable. Vous pouvez utiliser '...' comme type de données pour l'un des paramètres déclarés de votre fonction pour spécifier où dans la liste des paramètres commence la liste des arguments de variable. (Cela vous permet d'avoir un ou plusieurs arguments requis avant le début de la liste.)

printf () est un exemple de fonction écrite à l'aide de cette fonction (connue sous le nom de varargs).

printf(const char *restrict format, ...);

Ici, le premier argument est requis, puis peut être suivi de zéro ou plusieurs arguments supplémentaires.

Si vous écriviez votre fonction de cette façon, elle pourrait fournir une valeur par défaut pour le paramètre manquant.

1
jlehr