我正在开发Cocoa应用程序,并且使用常量NSString
作为存储偏好设置键名的方法。
我知道这是个好主意,因为如果需要,它可以轻松更改键。另外,这就是整个 “将数据与逻辑分离” 的概念。
无论如何,有没有一种好的方法可以使整个应用程序一次定义这些常量?我敢肯定有一种简单而智能的方法,但是现在我的课程只是重新定义了他们使用的课程。
// Constants.h
FOUNDATION_EXPORT NSString *const MyFirstConstant;
FOUNDATION_EXPORT NSString *const MySecondConstant;
//etc.
// Constants.m
NSString *const MyFirstConstant = @"FirstConstant";
NSString *const MySecondConstant = @"SecondConstant";
// Prefs.h
#define PREFS_MY_CONSTANT @"prefs_my_constant"
// Prefs.h
extern NSString * const PREFS_MY_CONSTANT;
// Prefs.m
NSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";
// In your *.m file
static NSString * const kNSStringConst = @"const value";
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "Constants.h"
#endif
// file.h
extern NSString* const MyConst;
//file.m
NSString* const MyConst = @"Lorem ipsum";
// StringConsts.h
#ifdef SYNTHESIZE_CONSTS
# define STR_CONST(name, value) NSString* const name = @ value
#else
# define STR_CONST(name, value) extern NSString* const name
#endif
// myfile.h
#import <StringConsts.h>
STR_CONST(MyConst, "Lorem Ipsum");
STR_CONST(MyOtherConst, "Hello world");
// myfile.m
#define SYNTHESIZE_CONSTS
#import "myfile.h"
extern NSString * const PPRememberMusicList;
extern NSString * const PPLoadMusicAtListLoad;
extern NSString * const PPAfterPlayingMusic;
extern NSString * const PPGotoStartupAfterPlaying;
NSString * const PPRememberMusicList = @"Remember Music List";
NSString * const PPLoadMusicAtListLoad = @"Load music when loading list";
NSString * const PPAfterPlayingMusic = @"After playing music";
NSString * const PPGotoStartupAfterPlaying = @"Go to startup pos. after playing";
// Constants.h
#define STR_CONST(name, value) extern NSString* const name
#include "ConstantList.h"
// Constants.m
#ifdef STR_CONST
#undef STR_CONST
#endif
#define STR_CONST(name, value) NSString* const name = @ value
#include "ConstantList.h"
// ConstantList.h
STR_CONST(kMyConstant, "Value");
…
// Prefs.h
extern NSString * const RAHUL;
// Prefs.m
NSString * const RAHUL = @"rahul";
正如 Abizer 所说,您可以将其放入 PCH 文件中。另一种不太脏的方法是为所有密钥创建一个包含文件,然后将其包含在您正在使用密钥的文件中,或者将其包含在 PCH 中。将它们放在自己的包含文件中,至少可以为您提供一个查找和定义所有这些常量的地方。
如果您想要全局常量之类的东西;一种快速的肮脏方法是将常量声明放入pch
文件中。