2013-05-02 2 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의 정수 만 저장해야합니다. 이제 색상 및 색상 설명을 대응하는 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]; 
} 
관련 문제