Mam stałe NSString, które chcę nazwać:
[newString isEqualToString:CONSTANT_STRING];
Masz tutaj zły kod?
Dostałem to ostrzeżenie:
wysyłanie „const NSString *” do parametru typu „NSString *” odrzuca kwalifikatory
Jak należy je zadeklarować?
objective-c
nsstring
warnings
constants
użytkownik4951
źródło
źródło
Odpowiedzi:
Powinieneś zadeklarować swój stały ciąg w następujący sposób:
zamiast:
Pierwszy z nich jest stałym wskaźnikiem do
NSString
obiektu, podczas gdy drugi jest wskaźnikiem do stałegoNSString
obiektu.Użycie a
NSString * const
uniemożliwia ponowne przypisanie kSomeConstantString w celu wskazania innegoNSString
obiektu.Metoda
isEqualToString:
oczekuje argumentu typuNSString *
. Jeśli przekażesz wskaźnik do stałego łańcucha (const NSString *
), przekażesz coś innego niż się spodziewa.Poza tym
NSString
obiekty są już niezmienne, więc ich tworzenieconst NSString
jest bez znaczenia.źródło
const
Kwalifikator dotyczy terminu na jego lewej stronie, a to odnosi się do terminu na jej prawa tylko wtedy, gdy nie ma nic na jej lewej stronie (npconst char *
ichar const *
są non-const wskaźniki do const char, alechar *const
jest wskaźnikiem const do const char ).po prostu umieszczam wszystko w jednym miejscu, które można znaleźć w różnych postach na przepełnieniu stosu i działa dla mnie, #define jest złe, ponieważ nie możesz korzystać z typów zmiennych, w zasadzie kompilator zastępuje wszystkie wystąpienia podczas kompilacji (importuj Constants.h, kiedy potrzebujesz):
źródło
poświęć kilka minut, aby to przeczytać. Dobra lektura na temat wskaźników piekła na stałych i odwrotnie.
http://c-faq.com/decl/spiral.anderson.html
źródło