可能重复:
目标C中的常量
我在NSUserDefaults中存储了一些应用程序设置.NSStrings用作键.问题是我需要使用这些NSString键在整个应用程序中访问这些设置.在应用程序的某些部分访问时,我可能会错误输入此类字符串键.
在整个应用程序中,我都有这样的陈述
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ReminderSwitch"];
BOOL shouldRemind = [[NSUserDefaults standardUserDefaults] boolForKey:@"ReminderSwitch"];
Run Code Online (Sandbox Code Playgroud)
如何以及在何处声明我可以在整个应用程序中访问的全局NSString常量.然后我将能够使用该常量而不必担心错误键入这些字符串键.
jus*_*tin 13
首先,你应该去一个真正的外部C符号 - 而不是宏.这样做是这样的:
SomeFile.h
extern NSString *const MONConstantString;
Run Code Online (Sandbox Code Playgroud)
SomeFile.m
NSString *const MONConstantString = @"MONConstantString";
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用ObjC和ObjC++的混合,则需要指定extern "C"
C++ TU - 这就是为什么您会看到#define
d导出因语言而异.
然后,您将希望将常量放在与其相关的接口附近.以您的示例为主角,您可能需要一组用于应用程序首选项的界面或声明.在这种情况下,您可以将声明添加到MONAppsPreferences
标头:
MONAppsPreferences.h
extern NSString *const MONApps_Pref_ReminderSwitch;
Run Code Online (Sandbox Code Playgroud)
MONAppsPreferences.m
NSString *const MONApps_Pref_ReminderSwitch = @"MONApps_Pref_ReminderSwitch";
Run Code Online (Sandbox Code Playgroud)
正在使用:
#import "MONAppsPreferences.h"
...
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:MONApps_Pref_ReminderSwitch];
Run Code Online (Sandbox Code Playgroud)
我想你的想法是对的.例如,我制作了如下的Const.h/m文件:
Const.h
extern NSString *const UserIdPrefKey;
extern NSString *const PasswordPrefKey;
extern NSString *const HomepagePrefKey;
Run Code Online (Sandbox Code Playgroud)
Const.m
#import "AEConst.h"
NSString *const UserIdPrefKey = @"UserIdPrefKey";
NSString *const PasswordPrefKey = @"PasswordPrefKey";
NSString *const HomepagePrefKey = @"UrlHomepagePrefKey";
Run Code Online (Sandbox Code Playgroud)
只能导入Const.h.
当您编写代码时,Xcode支持编写密钥名称,以便您可以避免错误输入.
您似乎正在寻找的只是一种在应用程序中定义字符串常量的方法.
你应该创建一个像头文件
Run Code Online (Sandbox Code Playgroud)// Constants.h FOUNDATION_EXPORT NSString *const MyFirstConstant; FOUNDATION_EXPORT NSString *const MySecondConstant; //etc.
您可以将此文件包含在使用常量的每个文件中,也可以包含在项目的预编译头文件中.
您可以在.m文件中定义这些常量
Run Code Online (Sandbox Code Playgroud)// Constants.m NSString *const MyFirstConstant = @"FirstConstant"; NSString *const MySecondConstant = @"SecondConstant";
应将Constants.m添加到应用程序/框架的目标中,以便将其链接到最终产品.
使用字符串常量而不是#define'd常量的优点是,您可以使用指针比较来测试相等性
(stringInstance == MyFirstConstant)
,这比字符串比较快得多([stringInstance isEqualToString:MyFirstConstant])
(并且更容易阅读,IMO).
感谢Barry Wark :)
最简单的方法是制作简单的.h文件,就像Utils.h一样,写下以下代码:
#define kUserDefaults @"ReminderSwitch"
归档时间: |
|
查看次数: |
21901 次 |
最近记录: |