为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]