アプリ内のすべてのフォントを統一するためのマクロを定義したい:
#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]
マクロは使用しないでください。それらは悪です(多くの理由の1つを経験しただけです)。
代わりに関数を使用します。
static inline UIFont *ExoRegularFont(CGFloat size) {
return [UIFont fontWithName:@"Exo-Regular" size:size];
}
#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_]
#define EXO_REGULAR_FONT(s) [UIFont fontWithName:@"Exo-Regular" size:s]