У меня есть константы NSString, которые я хочу назвать как:
[newString isEqualToString:CONSTANT_STRING];
Любой неправильный код здесь?
Я получил это предупреждение:
отправка 'const NSString *' в параметр типа 'NSString *' отбрасывает квалификаторы
Как они должны быть объявлены?
objective-c
nsstring
warnings
constants
user4951
источник
источник
Ответы:
Вы должны объявить вашу постоянную строку следующим образом:
вместо:
Первый является постоянным указателем на
NSString
объект, а второй - указателем на постоянныйNSString
объект.Использование a не
NSString * const
позволяет переназначить kSomeConstantString для указания на другойNSString
объект.Метод
isEqualToString:
ожидает аргумент типаNSString *
. Если вы передаете указатель на константу string (const NSString *
), вы передаете что-то отличное от ожидаемого.Кроме того,
NSString
объекты уже неизменны, поэтому создавать ихconst NSString
бессмысленно.источник
const
Классификатор относится к термину на его слева, и это относится к термину на его права , только если нет ничего на левой сторону (например ,const char *
иchar const *
являются неконстантными указателями на константный полукокс, ноchar *const
указатель сопзЬ к неконстантному полукоксу ).просто поместить все в одно место, которое находится на разных постах в stackoverflow и работает для меня, #define плохо, потому что вы не можете извлечь выгоду из типов переменных, в основном компилятор заменяет все вхождения при компиляции (импортируйте Constants.h всякий раз, когда вам нужно):
источник
Потратьте несколько минут, чтобы прочитать это. Goodread на указатели ад на константы и наоборот.
http://c-faq.com/decl/spiral.anderson.html
источник