在swift中处理printf的方式不同

时间:2016-08-05 13:20:28

标签: ios swift

我在iOS应用中使用C库。有时库调用printf命令并在Xcode中打印到控制台。有没有办法在swift中访问打印文本?

我想在应用中看到一些输出。

2 个答案:

答案 0 :(得分:1)

func dprint(_ items: Any...) {
    
    let string: String
    if items.count == 1, let s = items.first as? String {
        string = s
    } else if items.count > 1, let format = items.first as? String, let arguments = Array(items[1..<items.count]) as? [CVarArg] {
        string = String(format: format, arguments: arguments)
    } else {
        string = ""
    }
    print(string)
    
}

答案 1 :(得分:0)

如果我明白你的要求......

我不确定它是否可以在纯Swift中使用,但您可以在Swift项目中添加.m文件并拦截printf次调用。当你收到一个,你可以决定你还需要做什么。

在这个示例中,我在printf期间发布了一条通知,我正在内部监听&#34; AppDelegate.swift&#34;。

int printf(const char * __restrict format, ...)
{
    va_list args;
    va_start(args, format);
    NSString *f = [[NSString alloc] initWithUTF8String:format];
    NSString *string  = [[NSString alloc] initWithFormat:f arguments:args];
    puts([string UTF8String]);
    [[NSNotificationCenter defaultCenter] postNotificationName:@"printfNotification"
                                                        object:string];
    va_end(args);
    return (int)[string length];
}