5

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

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

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

myLabel.font = EXO_REGULAR_FONT(15);

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

在此处输入图像描述

(15 下有一个箭头)。

有什么想法要解决吗?谢谢

4

4 回答 4

13

更改参数的名称:

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

来自GCC 手册

扩展宏时,其主体中的参数的每次使用都将替换为相应参数的标记

因此,当您的宏展开时,它会将其插入您的代码中,因此会出现编译错误:

[UIFont fontWithName:@"Exo-Regular" 15:15]
于 2013-06-27T09:30:23.607 回答
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_]
于 2013-06-27T09:31:01.617 回答
5

不要使用宏;他们是邪恶的(你只是经历了众多原因之一)。

改用函数:

static inline UIFont *ExoRegularFont(CGFloat size) {
   return [UIFont fontWithName:@"Exo-Regular" size:size];
}
于 2013-07-02T10:01:19.253 回答
3
#define EXO_REGULAR_FONT(s) [UIFont fontWithName:@"Exo-Regular" size:s]
于 2013-06-27T09:32:30.197 回答