предупреждение «отправка const NSString *» в параметр типа «NSString *» отменяет квалификаторы » - PullRequest
338 голосов
/ 26 июля 2011

У меня есть константы NSString, которые я хочу вызвать как:

[newString isEqualToString:CONSTANT_STRING];

Есть ли здесь неправильный код?

Я получил это предупреждение:

посылка'const NSString *' для параметра типа 'NSString *' отбрасывает квалификаторы

Как их следует объявлять?

Ответы [ 3 ]

889 голосов
/ 26 июля 2011

Вы должны объявить вашу константную строку следующим образом:

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

вместо:

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

Первый является постоянным указателем на объект NSString, а второйуказатель на постоянный NSString объект.

Использование NSString * const не позволяет переназначить kSomeConstantString для указания на другой NSString объект.

Метод isEqualToString: ожидает аргументтипа NSString *.Если вы передаете указатель на постоянную строку (const NSString *), вы передаете что-то отличное от ожидаемого.

Кроме того, NSString объекты уже неизменны, поэтому делать их const NSString бессмысленно.

6 голосов
/ 25 июля 2013

просто для того, чтобы поместить все в одно место, которое можно найти в различных постах на stackoverflow и работает для меня, #define - это плохо, потому что вы не можете извлечь выгоду из типов переменных, в основном компилятор заменяет все вхождения при компиляции (импортируйте Constants.h всякий раз, когда вам нужно ):

//  Constants.h
#import <Foundation/Foundation.h>

@interface Constants : NSObject

extern NSString *APP_STATE_LOGGED_IN;
extern NSString *APP_STATE_LOGGED_OUT;
@end

// Constants.m
#import <Foundation/Foundation.h>
#import "Constants.h"

@implementation Constants

NSString *APP_STATE_LOGGED_IN  = @"APP_STATE_LOGGED_IN";
NSString *APP_STATE_LOGGED_OUT = @"APP_STATE_LOGGED_OUT";
@end
4 голосов
/ 21 декабря 2016

уделите несколько минут, чтобы прочитать это. Goodread на указатели ад на константы и наоборот.

http://c -faq.com / Децл / spiral.anderson.html

...