Средний план может быть вашим лучшим вариантом. Вы можете определить обычную функцию C или target-C, чтобы делать то, что сейчас делает ваш макрос:
// As a C function:
UIColor* UIColorFromRGB(NSInteger rgbValue) {
return [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0
green:((float)((rgbValue & 0xFF00) >> 8))/255.0
blue:((float)(rgbValue & 0xFF))/255.0
alpha:1.0];
}
// As an Objective-C function:
- (UIColor *)UIColorFromRGB:(NSInteger)rgbValue {
return [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0
green:((float)((rgbValue & 0xFF00) >> 8))/255.0
blue:((float)(rgbValue & 0xFF))/255.0
alpha:1.0];
}
Если вы решите придерживаться макроса, вы должны поставить круглые скобки вокруг rgbValue
, где бы он ни появлялся. Если я решу назвать ваш макрос с:
UIColorFromRGB(0xFF0000 + 0x00CC00 + 0x000099);
у вас могут быть проблемы.
Последний бит кода, безусловно, является наиболее читабельным, но, вероятно, наименее переносимым - его нельзя просто вызвать из любой точки вашей программы.
В общем, я бы рекомендовал преобразовать ваш макрос в функцию и оставить все как есть.