Tengo Constantes NSString, que quiero llamar como:
[newString isEqualToString:CONSTANT_STRING];
¿Algún código incorrecto aquí?
Recibí esta advertencia:
enviar 'const NSString *' al parámetro de tipo 'NSString *' descarta los calificadores
¿Cómo deben declararse?
objective-c
nsstring
warnings
constants
user4951
fuente
fuente
Respuestas:
Debe declarar su cadena constante de la siguiente manera:
en vez de:
El primero es un puntero constante a un
NSString
objeto, mientras que el segundo es un puntero a unNSString
objeto constante .El uso de le
NSString * const
impide reasignar kSomeConstantString para apuntar a unNSString
objeto diferente .El método
isEqualToString:
espera un argumento de tipoNSString *
. Si pasa un puntero a una cadena constante (const NSString *
), está pasando algo diferente de lo esperado.Además, los
NSString
objetos ya son inmutables, por lo que hacerlos noconst NSString
tiene sentido.fuente
const
calificativo se aplica al término de su izquierda, y se aplica al término de su derecho sólo si no hay nada en su lado izquierdo (por ejemplo,const char *
y unachar const *
son punteros no const a const char, perochar *const
es un puntero constante a Char no constante )solo para poner todo en un lugar que se encuentra en varias publicaciones en stackoverflow y funciona para mí, #define es malo porque no puede beneficiarse de los tipos de variables, básicamente el compilador reemplaza toda aparición cuando compila (importe Constants.h siempre que lo necesite):
fuente
dedica unos minutos para leer esto. Una buena lectura de punteros infierno en constantes y viceversa.
http://c-faq.com/decl/spiral.anderson.html
fuente