我想定义一个宏来统一我的应用程序中的所有字体:
#define EXO_REGULAR_FONT(size) [UIFont fontWithName:@"Exo-Regular" size:size]
而不是像这样使用这个宏:
myLabel.font = EXO_REGULAR_FONT(15);
但是编译器给了我这个错误:
(15 下有一个箭头)。
有什么想法要解决吗?谢谢
我想定义一个宏来统一我的应用程序中的所有字体:
#define EXO_REGULAR_FONT(size) [UIFont fontWithName:@"Exo-Regular" size:size]
而不是像这样使用这个宏:
myLabel.font = EXO_REGULAR_FONT(15);
但是编译器给了我这个错误:
(15 下有一个箭头)。
有什么想法要解决吗?谢谢
更改参数的名称:
#define EXO_REGULAR_FONT(theFontSize) [UIFont fontWithName:@"Exo-Regular" size:theFontSize]
来自GCC 手册:
扩展宏时,其主体中的参数的每次使用都将替换为相应参数的标记
因此,当您的宏展开时,它会将其插入您的代码中,因此会出现编译错误:
[UIFont fontWithName:@"Exo-Regular" 15:15]
#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_]
不要使用宏;他们是邪恶的(你只是经历了众多原因之一)。
改用函数:
static inline UIFont *ExoRegularFont(CGFloat size) {
return [UIFont fontWithName:@"Exo-Regular" size:size];
}
#define EXO_REGULAR_FONT(s) [UIFont fontWithName:@"Exo-Regular" size:s]