Могу ли я сделать рефакторинг, чтобы не использовать вызовы методов?

Допустим, у меня есть эти методы:

+(CCSprite *)a {
    return [self shapeFromRect:CGRectMake(0, 224, 224, 288) rotate:0];
}

+(CCSprite *)b {
    return [self shapeFromRect:CGRectMake(0, 224, 224, 288) rotate:0];
}

+(CCSprite *)c {
    return [self shapeFromRect:CGRectMake(0, 100, 50, 50) rotate:0];
}

+(CCSprite *)d {
    return [self shapeFromRect:CGRectMake(0, 100, 50, 50) rotate:90];
}

Существует избыточность, поэтому я мог бы изменить ее следующим образом:

+(CCSprite *)a {
    return [self shapeFromRect:[self abRect] rotate:0];
}

+(CCSprite *)b {
    return [self shapeFromRect:[self abRect] rotate:0];
}

+(CCSprite *)c {
    return [self shapeFromRect:[self cdRect] rotate:0];
}

+(CCSprite *)d {
    return [self shapeFromRect:[self cdRect] rotate:90];
}

+(CGRect)abRect {
    return CGRectMake(0, 224, 224, 288);
}

+(CGRect)cdRect {
    return CGRectMake(0, 100, 50, 50);
}

Но мне интересно, есть ли более эффективный способ сделать это?

Есть ли способ, которым я мог бы сохранить эти CGRects в перечислении typedef или другой форме константы, чтобы мне не приходилось выполнять вызовы методов?

1 ответ

+ (CCSprite *)sprite:(NSInteger)type
{
    float r = (type == 3)? 90 : 0;
    if (type < 2) {
        return [self shapeFromRect:CGRectMake(0, 224, 224, 288)] rotate:r];
    } else {
        return [self shapeFromRect:CGRectMake(0, 100, 50, 50)] rotate:r];
    }
}

может быть что-то похожее на это?

Другие вопросы по тегам