Jef*_*f B 4 constants objective-c nsdictionary nsarray
我正在尝试编写各种全局查找表.
我有游戏数据以字符/字符串格式存储在plist中,但在加载时需要采用整数/ id格式.
例如,在级别数据文件中,"p"表示播放器.在游戏代码中,玩家被表示为整数1.这让我做一些按位操作等等.我在这里大大简化了,但试图明白这一点.此外,还有一个转换为精灵表上精灵的坐标.
现在这个字符串 - >整数,整数 - >字符串,整数 - >坐标等转换是在代码中的几个地方使用case语句进行的.当然,这很臭,我宁愿用字典查找来做.
我创建了一个名为levelInfo的类,并希望为此转换定义字典,然后在需要进行转换时调用类方法,或以其他方式处理级别数据.
NSString *levelObjects = @"empty,player,object,thing,doohickey";
int levelIDs[] = [0,1,2,4,8];
// etc etc
@implementation LevelInfo
+(int) crateIDfromChar: (char) crateChar {
int idx = [[crateTypes componentsSeparatedByString:@","] indexOfObject: crateChar];
return levelIDs[idx];
}
+(NSString *) crateStringFromID: (int) crateID {
return [[crateTypes componentsSeparatedByString:@","] objectAtIndex: crateID];
}
@end
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?基本上构建这些临时数组或字典,或者每个调用进行此转换的任何内容都是错误的.我不知道一种声明常量NSArray或NSDictionary的方法.
拜托,告诉我一个更好的方法....
NSR*_*der 13
如果您希望数组可用于类中的所有代码,只需在@implementation上下文之外声明它,然后在类的+initialize方法中初始化它.
NSArray *levelObjects;
@implementation LevelInfo
+ (void) initialize
{
if (!levelObjects)
levelObjects = [[NSArray alloc]
initWithObjects:@"empty",@"player",@"object",@"thing",@"doohickey",nil];
}
// now any other code in this file can use "levelObjects"
@end
Run Code Online (Sandbox Code Playgroud)