3

目的の c 可変引数関数について明確な考えがありません。nlsog 型パラメーターを受け取る関数を書きたいのですが、その関数内で 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
4

3 に答える 3

11

C の varargs 型とNSLogvマクロを使用する必要があります。

-(void)printStatus:(NSString*)status, ...
{
    va_list args;
    va_start(args, status);
    NSLogv(status, args);
    va_end(args);
}

statusこれは、引数がフォーマット文字列であり、その後に引数が続くことを前提としています。

NSString(GUI を更新するために) フォーマット文字列と引数からを作成する場合は、以下に加えてこれを行うことができNSLogvます。

NSLogv(status, args);
NSString *message = [[NSString alloc] initWithFormat:status arguments:args];
// ... log to GUI
于 2013-04-23T10:01:24.920 に答える
-2

質問を正確に理解できません。私が理解したように、フォーマットされた文字列を使用できます

    [NSString stringWithFormat:@"this is string %@",@"String"];
于 2013-04-23T09:59:14.833 に答える