Eu tenho constantes NSString, que eu quero chamar como:
[newString isEqualToString:CONSTANT_STRING];
Algum código errado aqui?
Eu recebi este aviso:
enviar 'const NSString *' para o parâmetro do tipo 'NSString *' descarta qualificadores
Como estes devem ser declarados?
objective-c
nsstring
warnings
constants
user4951
fonte
fonte
Respostas:
Você deve declarar sua cadeia constante da seguinte maneira:
ao invés de:
O primeiro é um ponteiro constante para um
NSString
objeto, enquanto o último é um ponteiro para umNSString
objeto constante .O uso de um
NSString * const
impede que você reatribua o kSomeConstantString para apontar para umNSString
objeto diferente .O método
isEqualToString:
prevê um argumento do tipoNSString *
. Se você passar um ponteiro para uma string constante (const NSString *
), estará passando algo diferente do que o esperado.Além disso, os
NSString
objetos já são imutáveis, tornando-osconst NSString
sem sentido.fonte
const
qualificador aplica-se ao termo à esquerda e aplica-se ao termo à direita somente se não houver nada no lado esquerdo (por exemplo,const char *
e achar const *
são ponteiros não const para const char, maschar *const
é um ponteiro const para char não const )apenas para colocar tudo em um único local encontrado em várias postagens no stackoverflow e funciona para mim, #define é ruim porque você não pode se beneficiar de tipos de variáveis, basicamente o compilador substitui toda a ocorrência quando compila (importe Constants.h sempre que precisar):
fonte
poupe alguns minutos para ler isso. Uma boa leitura sobre os ponteiros do inferno sobre constantes e vice-versa.
http://c-faq.com/decl/spiral.anderson.html
fonte