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

マクロは使用しないでください。それらは悪です(多くの理由の1つを経験しただけです)。

代わりに関数を使用します。

static inline UIFont *ExoRegularFont(CGFloat size) {
   return [UIFont fontWithName:@"Exo-Regular" size:size];
}
于 2013-07-02T10:01:19.253 に答える
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 に答える
3
#define EXO_REGULAR_FONT(s) [UIFont fontWithName:@"Exo-Regular" size:s]
于 2013-06-27T09:32:30.197 に答える