Как объявить и использовать глобальные константы NSString
Возможный дубликат:
Константы в Objective C
Я храню некоторые настройки приложения в NSUserDefaults. В качестве ключей используются NSStrings. Проблема в том, что мне нужно получить доступ к этим настройкам во всем приложении, используя эти клавиши NSString. Есть вероятность, что я ошибаюсь при использовании такого строкового ключа при доступе в какой-то части приложения.
Во всем приложении у меня есть такие утверждения
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ReminderSwitch"];
BOOL shouldRemind = [[NSUserDefaults standardUserDefaults] boolForKey:@"ReminderSwitch"];
Как и где я могу объявить глобальную константу NSString, доступную во всем приложении. Затем я смогу использовать эту константу, не беспокоясь о том, чтобы опечатать эти строковые ключи.
Ответы
Ответ 1
Во-первых, вы должны пойти на реальный внешний символ C - не макрос. это делается следующим образом:
SomeFile.h
extern NSString *const MONConstantString;
SomeFile.m
NSString *const MONConstantString = @"MONConstantString";
обратите внимание, что если вы используете сочетание ObjC и ObjС++, вам нужно указать extern "C"
для С++ TU - поэтому вы увидите экспорт #define
d, который зависит от языка.
Затем вам нужно будет поместить константу рядом с интерфейсами, к которым она относится. Взяв ваш пример в качестве примера, вам может потребоваться набор интерфейсов или объявлений для ваших настроек приложения. В этом случае вы можете добавить объявление в заголовок MONAppsPreferences
:
MONAppsPreferences.h
extern NSString *const MONApps_Pref_ReminderSwitch;
MONAppsPreferences.m
NSString *const MONApps_Pref_ReminderSwitch = @"MONApps_Pref_ReminderSwitch";
При использовании:
#import "MONAppsPreferences.h"
...
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:MONApps_Pref_ReminderSwitch];
Ответ 2
Твоя мысль правильная, я думаю. Например, я сделал файл Const.h/m, как показано ниже:
const.h
extern NSString *const UserIdPrefKey;
extern NSString *const PasswordPrefKey;
extern NSString *const HomepagePrefKey;
Const.m
#import "AEConst.h"
NSString *const UserIdPrefKey = @"UserIdPrefKey";
NSString *const PasswordPrefKey = @"PasswordPrefKey";
NSString *const HomepagePrefKey = @"UrlHomepagePrefKey";
Необходимо импортировать только Const.h.
Когда вы пишете код, Xcode поддерживает запись имени ключа, чтобы можно было избежать пропусков.
Ответ 3
То, что вы, похоже, ищете, - это просто способ определения строковых констант в вашем приложении.
Смотрите этот вопрос
и этот ответ, который я привел ниже:
Вам следует создать файл заголовка, например
// Constants.h
FOUNDATION_EXPORT NSString *const MyFirstConstant;
FOUNDATION_EXPORT NSString *const MySecondConstant;
//etc.
Вы можете включить этот файл в каждый файл, который использует константы или в предварительно скомпилированном заголовке > для проекта.
Вы определяете эти константы в файле .m, например
// Constants.m
NSString *const MyFirstConstant = @"FirstConstant";
NSString *const MySecondConstant = @"SecondConstant";
Константы .m должны быть добавлены в ваш целевой объект application/framework, чтобы он был связан с конечным продуктом.
Преимущество использования строковых констант вместо # define'd констант заключается в том, что вы можете проверить равенство, используя сравнение указателей (stringInstance == MyFirstConstant)
, который намного быстрее, чем строка сравнение ([stringInstance isEqualToString:MyFirstConstant])
(и легче читать, ИМО).
Благодаря Барри Уорку:)
Ответ 4
Самый простой способ сделать это - сделать простой файл .h, например Utils.h, и написать там следующий код:
#define kUserDefaults @"ReminderSwitch"