2013-05-02 157 views
0

我有关于类方法的问题。首先这才是我的代码:使用数组的类方法...?

typedef enum Colors { 
    PresetColorsWhite=0, 
    PresetColorsBlue=1, 
    PresetColorsLightGray=2, 
    PresetColorsGray=3, 
    PresetColorsRed=4, 
    PresetColorsGreen=5, 
    PresetColorsYellow=6, 
    PresetColorsOrange=7, 
    PresetColorsPurple=8, 
    PresetColorsBrown=9, 
} PresetColors; 

    @interface PresetColor : NSObject 

    @property UIColor *color; 
    @property NSString *colorName; 

    -(void)initWithPresetColor:(PresetColors)presetColor; 
    -(NSArray *)getAllColorNames; 
    -(UIColor *)getColorWithPresetColor:(PresetColors)presetColor; 

和实现:

@interface PresetColor() 

@property (nonatomic, strong) NSMutableArray *colorArray; 
@property (nonatomic, strong) NSMutableArray *colorNamesArray; 

@end 

@implementation PresetColor 

@synthesize color = _color; 
@synthesize colorName = _colorName; 

-(id)init{ 
    [self initWithPresetColor:PresetColorsWhite]; 
    return self; 
} 

-(void)initWithPresetColor:(PresetColors)presetColor{ 
    [self setupDictionaries]; 

    self.color = [self.colorArray objectAtIndex:presetColor]; 
    self.colorName = [self.colorNamesArray objectAtIndex:presetColor]; 
} 

- (void)setupDictionaries { 
    self.colorArray = [[NSMutableArray alloc]init]; 
    [self.colorArray insertObject:[UIColor whiteColor] atIndex:PresetColorsWhite]; 
    [self.colorArray insertObject:[UIColor blueColor] atIndex:PresetColorsBlue]; 
    [self.colorArray insertObject:[UIColor lightGrayColor] atIndex:PresetColorsLightGray]; 
    [self.colorArray insertObject:[UIColor grayColor] atIndex:PresetColorsGray]; 
    [self.colorArray insertObject:[UIColor redColor] atIndex:PresetColorsRed]; 
    [self.colorArray insertObject:[UIColor greenColor] atIndex:PresetColorsGreen]; 
    [self.colorArray insertObject:[UIColor yellowColor] atIndex:PresetColorsYellow]; 
    [self.colorArray insertObject:[UIColor orangeColor] atIndex:PresetColorsOrange]; 
    [self.colorArray insertObject:[UIColor purpleColor] atIndex:PresetColorsPurple]; 
    [self.colorArray insertObject:[UIColor brownColor] atIndex:PresetColorsBrown]; 

    self.colorNamesArray = [[NSMutableArray alloc]init]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"White", nil) atIndex:PresetColorsWhite]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"Blue", nil) atIndex:PresetColorsBlue]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"LightGray", nil) atIndex:PresetColorsLightGray]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"Gray", nil) atIndex:PresetColorsGray]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"Red", nil) atIndex:PresetColorsRed]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"Green", nil) atIndex:PresetColorsGreen]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"Yellow", nil) atIndex:PresetColorsYellow]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"Orange", nil) atIndex:PresetColorsOrange]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"Purple", nil) atIndex:PresetColorsPurple]; 
    [self.colorNamesArray insertObject:NSLocalizedString(@"Brown", nil) atIndex:PresetColorsBrown]; 
} 

- (NSArray *)getAllColorNames { 
    return [self.colorNamesArray copy]; 
} 

- (UIColor *)getColorWithPresetColor:(PresetColors)presetColor{ 
    return [self.colorArray objectAtIndex:presetColor]; 
} 

我想在我的应用程序是可能性用户从一些预定义的颜色选择。在数据库中只能保存typedef的整数。 现在我正在寻找最简单的方法来将颜色和ColorDescriptions保存在数组中,并将对应的typedef'd PresetColors作为关键字。一些方法当然应该是针对对象的,但有些方法应该是类方法。 我的意思是方法 - (UIColor *)getColorWithPresetColor:(PresetColors)presetColor;实际上应该是一个类方法等,但我怎么能做到这一点,而不是每次初始化数组?当然,我可以制作一个复杂的开关语句,但是我想知道数组是否有另一种方式,所以我只有一个地方可以将对象的键设置到其他地方?我希望这是清楚明白我的意思:)

回答

5

如果我是你,我会改变colorArray静态实例,如:

static NSArray *colorArray = nil; 

+(NSArray *) colorArray 
{ 
    if (colorArray == nil) 
    { 
     colorArray = @[[UIColor whiteColor], ...]; 
    } 

    return colorArray; 
} 

即可;

//This will work because you set enum values in the range 0 - 9 and btw those are the default values you don't need to set them explicitly 
+(UIColor *)getColorWithPresetColor:(PresetColors)presetColor 
{ 
    return colorArray[presetColor]; 
}