gpt4 book ai didi

iphone - NSLog 内部可变参数函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:18:07 24 4
gpt4 key购买 nike

我对 objective 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

最佳答案

您需要使用 C 的可变参数类型和 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

关于iphone - NSLog 内部可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16166313/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com