我沒有關於目標c變量參數函數的清晰想法。我想寫一個函數,它將採用一個nlsog類型的參數,但有時我會在該函數中使用NSLog。我怎樣才能做到這一點?NSLog裏面的變量參數函數
-(void) printStatus:(NSString*)status, ...
{
// I want use use NSLog with all these parameter here.
// some gui logging also happens here
}
電話會是這樣,
[self printStatus:@"status"];
或
[self printStatus:@"Staus: %@", someObject];
而不是使用的NSLog的,我想用printStatus。當我需要將控制檯日誌記錄切換到GUI日誌記錄時,我只能更改爲printStatus函數,而不更改代碼中的所有位置。
或者像我現在用在這裏使用DLOG,
#ifdef DEBUG
# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
# define DLog(...) /* */
#endif
謝謝。但我使用的是一個DLog宏,我在那裏使用NSLog。有什麼辦法可以使用NSLog? #ifdef DEBUG #define DLog(fmt,...)NSLog((@「%s [Line%d]」fmt),__PRETTY_FUNCTION__,__LINE__,## __ VA_ARGS__) #else #define DLog(...)/* */ #endif – karim 2013-04-23 10:06:00
傳遞函數/方法中變量參數的唯一方法是使用'va_list'。這就是爲什麼大多數圖書館都會提供一個接受'va_list'的'* v'選項。因此,您應該創建一個調用「NSLogv」的'DLogv',並將參數轉發給它。 – 2013-04-23 10:07:24
謝謝。我在想第二個案子。但我不確定第一例。由於在第二種情況下創建字符串時,我必須調用va_start(args,status),否則args不會與NSString一起使用。不是? – karim 2013-04-23 10:12:20