363 votes

« envoi ' const NSString * ' au paramètre de type ' NSString * ' ignore les qualificatifs » AVERTISSEMENT

J’ai des constantes NSString, que je veux appeler comme :

N’importe quel code erroné ici ?

J’ai reçu cet avertissement :

envoi de ' const NSString ' au paramètre de type ' NSString ' ignore les qualificatifs

Comment celles-ci doivent être déclarées ?

941voto

albertamg Points 18630

Vous devez déclarer votre constante chaîne de caractères comme suit:

NSString * const kSomeConstantString = @""; // constant pointer

au lieu de:

const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";

Le premier est un pointeur constant vers un NSString de l'objet, tandis que le second est un pointeur vers une constante NSString objet.

À l'aide d'un NSString * const vous empêche de réaffectation kSomeConstantString à point à un autre NSString objet.

La méthode isEqualToString: attend un argument de type NSString *. Si vous passez un pointeur vers une chaîne constante (const NSString *), vous êtes de passage à quelque chose de différent de ce qu'il attend.

En outre, NSString des objets sont déjà immuable, afin de faire leur const NSString est vide de sens.

6voto

freezing_ Points 76

juste pour mettre tout sur un seul endroit qui trouvé sur différents post sur stackoverflow et fonctionne pour moi, #define est mauvais parce que vous ne peut pas bénéficier des types de variables, essentiellement le compilateur remplace toute occurrence lorsque compile (importer Constants.h quand vous en avez besoin) :

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