首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三维图像查找词典?

三维图像查找词典?
EN

Stack Overflow用户
提问于 2013-09-23 15:47:10
回答 2查看 98关注 0票数 1

请帮助我建立一个多维查找表,我想摆脱该死的箭头反模式,根本不使用ifs和开关。

我有两个UIControlStates

UIControlStateNormal UIControlStateHighlighted

定义为枚举的两个边

EnumSideLeft

EnumSideRight

和两个阴影作为枚举

EnumShadeLight EnumShadeDark

这是一个2x2x2立方体。每个单元格/三个单元/组合,我有一个独特的图片。

我希望有一个类方法遍历配置字典并返回一个UIimage +一个提供配置字典本身的类方法。

但不知何故,我想不出用现代文字方法来定义字典的有效方法+用字典来定义立方体的层次结构。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-23 20:21:21

我可能会采用CouchDeveloper建议的方法,但如果您希望按照您在问题中描述的思路进行具体操作,请尝试如下所示:

代码语言:javascript
复制
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"]}}};
}
票数 1
EN

Stack Overflow用户

发布于 2013-09-23 16:55:22

您可以使用带有特殊密钥的NSDictionary

代码语言:javascript
复制
NSDictionary* images = ...;

int x,y,z = ...;
NSString* key = [NSString stringWithFormat:@"%d,%d,%d", x,y,z);

UIImage* image = images[key];

这只是一个主意。您也可以将键构造为带有移位和位或操作的整数,例如:

代码语言:javascript
复制
int key = (z<<4) | (y<<2) | x; 

然后为密钥创建一个NSNumber。这比生成NSString更快。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18963522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档