我想定義一個宏統一所有的字體在我的應用程序:定義宏UIFont不起作用
#define EXO_REGULAR_FONT(size) [UIFont fontWithName:@"Exo-Regular" size:size]
,也比使用這個宏是這樣的:
myLabel.font = EXO_REGULAR_FONT(15);
但是,編譯器給予我這個錯誤:
(有一個箭頭下15)。
任何想法解決?由於
我想定義一個宏統一所有的字體在我的應用程序:定義宏UIFont不起作用
#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]
When the macro is expanded, each use of a parameter in its body is replaced by the tokens of the corresponding argument
因此,當宏展開時,它把這個在你的代碼,因此編譯錯誤:
[UIFont fontWithName:@"Exo-Regular" 15:15]
#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]
不要使用宏;他們是邪惡的(你剛剛經歷了許多原因之一)。
使用的函數:
static inline UIFont *ExoRegularFont(CGFloat size) {
return [UIFont fontWithName:@"Exo-Regular" size:size];
}
將是不好的做法,以保持這個類似於macros.h並在PCH附上它的東西? – BooRanger
@BooRanger一點都沒有。絕對比#define更好,更安全。 –
UIFont上的類別也是處理自定義字體的好方法。類似於'+ systemFontOfSize:'我使用'+ appFontOfSize:','+ boldAppFontOfSize:','+ headingFont',...在我的應用程序中。 –