可能重复:
Constants in Objective C
我在NSUserDefaults中存储了一些应用设置。 NSStrings用作键。问题是我需要使用这些NSString键在整个应用程序中访问这些设置。在应用程序的某些部分访问时,我可能会错误输入此类字符串键。
在整个应用程序中,我都有这样的陈述
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ReminderSwitch"];
BOOL shouldRemind = [[NSUserDefaults standardUserDefaults] boolForKey:@"ReminderSwitch"];
我如何以及在何处声明我可以在整个应用程序中访问的全局NSString常量。然后,我将能够使用该常量,而不必担心错误键入这些字符串键。
答案 0 :(得分:13)
首先,你应该去一个真正的外部C符号 - 而不是宏。这样做是这样的:
SomeFile.h
extern NSString *const MONConstantString;
SomeFile.m
NSString *const MONConstantString = @"MONConstantString";
请注意,如果您混合使用ObjC和ObjC ++,则需要为C ++ TU指定extern "C"
- 这就是为什么您会看到#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];
答案 1 :(得分:9)
我认为你的想法是对的。例如,我制作了如下的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支持编写密钥名称,以避免错误输入。
答案 2 :(得分:5)
您似乎正在寻找的只是一种在应用中定义字符串常量的方法。
参见this question 和this answer它,我在下面引用过:
您应该创建一个像
这样的头文件// Constants.h FOUNDATION_EXPORT NSString *const MyFirstConstant; FOUNDATION_EXPORT NSString *const MySecondConstant; //etc.
您可以在使用常量的每个文件中或在预编译的头文件中包含此文件&gt;为该项目。
您可以在.m文件中定义这些常量,例如
// Constants.m NSString *const MyFirstConstant = @"FirstConstant"; NSString *const MySecondConstant = @"SecondConstant";
应将Constants.m添加到您的应用程序/框架的目标中,以便将其链接到最终产品。
使用字符串常量而不是#define'd常量的优点 是你可以使用指针比较测试相等性
(stringInstance == MyFirstConstant)
比字符串快得多 比较([stringInstance isEqualToString:MyFirstConstant])
(和 更容易阅读,IMO)。
感谢Barry Wark:)
答案 3 :(得分:5)
最简单的方法是制作简单的.h文件,就像Utils.h一样,写下以下代码:
#define kUserDefaults @"ReminderSwitch"