为UIFont定义macros不起作用
我想定义一个macros来统一我的应用程序中的所有字体:
#define EXO_REGULAR_FONT(size) [UIFont fontWithName:@"Exo-Regular" size:size]
而不是像这样使用这个macros:
myLabel.font = EXO_REGULAR_FONT(15);
但编译器给我这个错误:
(15岁以下有箭头)。
任何想法解决? 谢谢
更改参数的名称:
#define EXO_REGULAR_FONT(theFontSize) [UIFont fontWithName:@"Exo-Regular" size:theFontSize]
从GCC手册 :
当macros展开时,它的主体中每个参数的使用都被相应参数的标记取代
所以当你的macros被扩展时,它将在代码中插入,因此编译错误:
[UIFont fontWithName:@"Exo-Regular" 15:15]
不要使用macros; 他们是邪恶的(你只是经历了许多原因之一)。
改用一个函数:
static inline UIFont *ExoRegularFont(CGFloat size) { return [UIFont fontWithName:@"Exo-Regular" size:size]; }
#define EXO_REGULAR_FONT(size) [UIFont fontWithName:@"Exo-Regular" size:size]
当你调用EXO_REGULAR_FONT(15)
,它会被扩展
[UIFont fontWithName:@"Exo-Regular" 15:15]
所以你需要像这样定义它,例如:
#define EXO_REGULAR_FONT(_size_) [UIFont fontWithName:@"Exo-Regular" size:_size_]
#define EXO_REGULAR_FONT(s) [UIFont fontWithName:@"Exo-Regular" size:s]