请帮助我建立一个多维查找表,我想摆脱该死的箭头反模式,根本不使用ifs和开关。
我有两个UIControlStates
UIControlStateNormal UIControlStateHighlighted
定义为枚举的两个边
EnumSideLeft
EnumSideRight
和两个阴影作为枚举
EnumShadeLight EnumShadeDark
这是一个2x2x2立方体。每个单元格/三个单元/组合,我有一个独特的图片。
我希望有一个类方法遍历配置字典并返回一个UIimage +一个提供配置字典本身的类方法。
但不知何故,我想不出用现代文字方法来定义字典的有效方法+用字典来定义立方体的层次结构。
发布于 2013-09-23 20:21:21
我可能会采用CouchDeveloper建议的方法,但如果您希望按照您在问题中描述的思路进行具体操作,请尝试如下所示:
static NSDictionary *configDict;
typedef NS_ENUM(NSUInteger, BDSide) {
BDSideLeft,
BDSideRight
};
typedef NS_ENUM(NSUInteger, BDShade) {
BDShadeLight,
BDShadeDark
};
+ (UIImage *)configurationForState:(UIControlState)state Side:(BDSide)side Shade:(BDShade)shade
{
UIImage *result = nil;
NSDictionary *stateDictionary = [configDict objectForKey:@(state)];
NSDictionary *sideDictionary = [stateDictionary objectForKey:@(side)];
result = [sideDictionary objectForKey:@(shade)];
return result;
}
+(void)initialize
{
configDict = @{@(UIControlStateNormal):
@{@(BDSideLeft):
@{@(BDShadeLight): [UIImage imageNamed:@"normal-left-light.png"],
@(BDShadeDark): [UIImage imageNamed:@"normal-left-dark.png"]},
@(BDSideRight):
@{@(BDShadeLight): [UIImage imageNamed:@"normal-right-light.png"],
@(BDShadeDark): [UIImage imageNamed:@"normal-right-dark.png"]}},
@(UIControlStateHighlighted):
@{@(BDSideLeft):
@{@(BDShadeLight): [UIImage imageNamed:@"highlight-left-light.png"],
@(BDShadeDark): [UIImage imageNamed:@"highlight-left-dark.png"]},
@(BDSideRight):
@{@(BDShadeLight): [UIImage imageNamed:@"highlight-right-light.png"],
@(BDShadeDark): [UIImage imageNamed:@"highlight-right-dark.png"]}}};
}发布于 2013-09-23 16:55:22
您可以使用带有特殊密钥的NSDictionary:
NSDictionary* images = ...;
int x,y,z = ...;
NSString* key = [NSString stringWithFormat:@"%d,%d,%d", x,y,z);
UIImage* image = images[key];这只是一个主意。您也可以将键构造为带有移位和位或操作的整数,例如:
int key = (z<<4) | (y<<2) | x; 然后为密钥创建一个NSNumber。这比生成NSString更快。
https://stackoverflow.com/questions/18963522
复制相似问题