2013-05-02 4 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; должен быть классным методом и т. Д. Но как я могу это сделать без всякого инициализации массива? Конечно, я мог бы сделать из этого сложного оператора switch, однако я задавался вопросом, есть ли другой способ с массивами, поэтому у меня есть только одно место, где я устанавливаю ключи к объектам и нигде больше? Я надеюсь, что это понятно, что я имею в виду :)

ответ

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]; 
}