为UIFont定义宏不起作用

时间:2013-06-27 09:26:57

标签: ios objective-c

我想定义一个宏来统一我应用中的所有字体:

#define EXO_REGULAR_FONT(size) [UIFont fontWithName:@"Exo-Regular" size:size]

而不是像这样使用这个宏:

myLabel.font = EXO_REGULAR_FONT(15);

但是编译器给了我这个错误:

enter image description here

(15岁以下有一个箭头)。

要解决的任何想法?感谢

4 个答案:

答案 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]