Gar*_*tet 12 iphone xcode objective-c c-preprocessor
我有几个obj-c类,每个类都需要一些在switch语句中使用的常量.
我曾尝试使用#define预处理器指令在.m文件中定义这些数字常量.所有这些常数都以'kCell'开头.这似乎运作良好,但无论我在项目中的哪个位置,Xcode的代码意义都会向我呈现每个'kCell'前缀常量.做#define常量具有全局范围是什么?如果是这样,那么定义纯本地类常量的最佳方法是什么,这些常量不会在其他类中使用类似命名的常量进行分类?
Man*_*ath 34
拥有自己的常量文件,如MyConstants.
在MyConstants.h中声明所有常量:
static const int kRedisplayTileCount = 5 ;
extern NSString* const kCellTitleKey;
Run Code Online (Sandbox Code Playgroud)
并在MyConstants.m中定义它们
NSString* const kCellTitleKey = @"CellTitle";
Run Code Online (Sandbox Code Playgroud)
通过将常量保存在单独的文件中,您可以轻松跟踪它们并更改其值.
这是定义纯常量的最佳方法.这也将避免重复键.
只有您需要做的是在其他类中导入此类:
#import "MyConstants.h"
Run Code Online (Sandbox Code Playgroud)
并立即使用这些密钥:
obj = [[NSUserDefaults standardUserDefaults] integerForKey: kCellTitleKey];
Run Code Online (Sandbox Code Playgroud)
我通常发现枚举最适合用于交换机:
typedef enum {
kCellConstantOne = 1,
kCellConstantTwo = 2, //...
} kCellConstants;
/* later */
- (void)foo:(kCellConstant)constant {
switch (constant) {
case kCellConstantOne:
//do something
break;
case kCellConstantTwo:
//do something else
break;
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,xCode不会将代码检测(代码完成,自动完成)限制为任何特定文件.它试图找出哪些常量可以从代码的哪些区域访问,但我注意到它不是100%准确.
我建议不要用相同的前缀启动它们.例如,如果您有两种不同类型的表格单元格,kCustomCell和kOtherCell可能是更好的方法来命名常量.
该#define常数只存在于.m文件.
如果常量是整数,您还可以在enum以下内容中定义它们:
enum {
kCellSomething = 123,
kCellAnotherThing = 456,
...
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14731 次 |
| 最近记录: |