我正在创建一个用于学习目的的Reddit客户端.我需要一个包含常量的文件.我正在考虑在文件中导入文件,Reddit-Prefix.pch以使常量可用于所有文件.这是一种很好的做事方式吗?另外,我已经完成了我的研究并发现了几种创建常量的方法,但我不知道使用哪种方法:
#define 宏conststatic constextern constenum那么首选方式是哪种方式?惯例是什么?我知道"这取决于",但更具体地说,我的问题是:每个解决方案的用例是什么?
此外,如果使用extern const,我是否需要导入文件,或者常量可以全局使用而无需导入文件?
我可以在逻辑上得出结论的一点enum是,在定义类似自定义错误域的东西时,这是最好的选择(我实际上是对吗?).但其他人呢?
在我的iOS/Objective C项目中,我经常使用带有API密钥的constants.h文件等.直到今天,我一直在声明我的常数static const:
static NSString * const kAPIKey = @"wembvkejrvb43789gvbiu2bvfake";
Run Code Online (Sandbox Code Playgroud)
这工作正常,但有一个不幸的缺点,我只能创建基元和NSString文字的常量.其他对象(如UIColor对象)不能存储在此常量中,因为它们无法使用静态文字语法进行初始化(我的理解,需要引用).
在阅读了一些C++文档后,我理解了一些事情:
static是不必要的,因为它const是隐式静态的.NSString * const x实际上是在x中声明一个常量和不可变的值.我无法更改值,但可以更改x指向的值.这些结论是否正确?
怎样的extern const不同?我假设它们是外部链接的(因此是extern关键字).它们是在运行时定义的吗?我可以创建某种动态 extern const,可以使用类方法返回的值进行设置吗?
例如,我想创建一个包含UIColor值的全局范围常量.我想使用[UIColor colorWithRed:green:blue:alpha:]类方法构造此颜色值.这显然不适用于我一直在使用的内部链接常量(我假设因为它发生在编译时) - 但是可能使用外部常量,可能在+initialize方法中设置吗?
任何有关此行为细节的详细说明都会非常有用.