我正在开发一个Cocoa应用程序,我使用常量nsstring作为存储我的首选项的键名的方式。
我知道这是一个好主意,因为它允许在必要时轻松更改密钥。 此外,这是整个“将数据与逻辑分离”的概念。
不管怎样,有没有一种好方法让这些常量在整个应用程序中定义一次?
我相信有一种简单而聪明的方法,但现在我的类只是重新定义它们所使用的方法。
我正在开发一个Cocoa应用程序,我使用常量nsstring作为存储我的首选项的键名的方式。
我知道这是一个好主意,因为它允许在必要时轻松更改密钥。 此外,这是整个“将数据与逻辑分离”的概念。
不管怎样,有没有一种好方法让这些常量在整个应用程序中定义一次?
我相信有一种简单而聪明的方法,但现在我的类只是重新定义它们所使用的方法。
当前回答
// Prefs.h
extern NSString * const RAHUL;
// Prefs.m
NSString * const RAHUL = @"rahul";
其他回答
如果你想要全局常数;一种快速但肮脏的方法是将常量声明放入PCH文件中。
简单的方法:
// 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";
第二种方法的一个好处是,改变常量的值不会导致整个程序的重新构建。
我自己有一个头专门声明常量nsstring用于首选项,如下所示:
extern NSString * const PPRememberMusicList;
extern NSString * const PPLoadMusicAtListLoad;
extern NSString * const PPAfterPlayingMusic;
extern NSString * const PPGotoStartupAfterPlaying;
然后在附带的.m文件中声明它们:
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";
这种方法对我很有帮助。
编辑:注意,如果字符串在多个文件中使用,则效果最好。如果只有一个文件使用它,你可以在使用字符串的。m文件中做#define kNSStringConstant @“常量NSString”。
// Prefs.h
extern NSString * const RAHUL;
// Prefs.m
NSString * const RAHUL = @"rahul";
如果你想调用nsstring。newline;从objective c,你想要它是静态常量,你可以在swift中创建这样的东西:
public extension NSString {
@objc public static let newLine = "\n"
}
这样你就有了很好的可读的常量定义,并且可以从你选择的类型中获得,同时还可以绑定到类型的上下文。