【发布时间】:2014-03-04 16:18:21
【问题描述】:
我正在创建一个UIColor 类别,其中有一组我想轻松访问然后缓存的颜色。
这基本上是我创建颜色的方式:
#define RGB(r, g, b) [self colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]
// [..]
+ (instancetype)pigletColor
{
static UIColor *pigletColor = nil;
if (!pigletColor) {
pigletColor = RGB(237.0, 0.0, 130.0);
}
return pigletColor;
}
但是,重复上述十次并不是很干净,所以我正在尝试创建一个宏来让我轻松地做到这一点。
理想情况下,我想用COLORGETTER(piglet, 234.0, 0.0, 130.0) 替换上面的内容。我已经尝试过了,但我无法让它工作。这是我得到的:
#define COLORGETTER(name, red, green, blue)\
+ (instancetype *)##name##Color\
{\
static UIColor *##name##Color = nil;\
if (!##name##Color) {\
##name##Color = RGB(red, green, blue);\
}\
return ##name##Color;\
}
但是,上述方法不起作用,因为我无法弄清楚 #/## 运算符。
有什么想法吗?
【问题讨论】:
标签: objective-c macros c-preprocessor