我想定义一个宏来统一我应用中的所有字体:
#define EXO_REGULAR_FONT(size) [UIFont fontWithName:@"Exo-Regular" size:size]
而不是像这样使用这个宏:
myLabel.font = EXO_REGULAR_FONT(15);
但是编译器给了我这个错误:
(15岁以下有一个箭头)。
要解决的任何想法?感谢
答案 0 :(得分:13)
更改参数名称:
#define EXO_REGULAR_FONT(theFontSize) [UIFont fontWithName:@"Exo-Regular" size:theFontSize]
来自GCC manual:
扩展宏时,其主体中每个参数的使用都被相应参数的标记替换
因此,当您的宏被展开时,它会在您的代码中插入它,因此编译错误:
[UIFont fontWithName:@"Exo-Regular" 15:15]
答案 1 :(得分:5)
#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_]
答案 2 :(得分:5)
不要使用宏;他们是邪恶的(你只是遇到了很多原因之一)。
改为使用函数:
static inline UIFont *ExoRegularFont(CGFloat size) {
return [UIFont fontWithName:@"Exo-Regular" size:size];
}
答案 3 :(得分:3)
#define EXO_REGULAR_FONT(s) [UIFont fontWithName:@"Exo-Regular" size:s]