Skip to main content
 首页 » 操作系统

ios之Swift 语言中的 Logtrace 等价物之iPhone

2024年01月01日47lhb25

Swift 语言中是否有任何等效的日志跟踪?

我不想使用桥头概念。

我想要实现的目标是,我希望 println 语句在应用程序的开发/暂存阶段写入控制台,并且通过轻按开关,控制台打印应该在推送到应用程序商店之前停止。

换个思路,println 会在分发期间自动停止在控制台上打印吗? (可能是迁移到 Swift 的好处)

请您参考如下方法:

您可以采用与内置 assert() 函数类似的方法,即 在 Swift 博客中解释:

logTrace 函数将“自动关闭”作为第一个参数:

func logTrace(message: @autoclosure () -> String, file: StaticString = __FILE__, line: UWord = __LINE__) { 
        #if DEBUG 
            let msg = message() 
            println("\(file):\(line): \(msg)") 
        #endif 
} 

示例用法:

let height = 13 
logTrace ( "height = \(height)" ) 
// Output: /Users/.../main.swift:14: height = 13 

要完成这项工作,您必须将“-DDEBUG”添加到“其他 Swift 标志”中 调试配置,对比

此方法的优点是(与assert()一样) block 不是 在发布配置中完全评估,其中未定义“DEBUG”,例如在

logTrace ( someFunctionReturningAString() ) 

该函数不会在发布配置中调用,因此任何副作用 或避免性能开销。


Swift 2 更新:

func logTrace(@autoclosure message: () -> String, file: String = __FILE__, line: Int = __LINE__) { 
    #if DEBUG 
        let msg = message() 
        print("\(file):\(line): \(msg)") 
    #endif 
} 

Swift 3 的更新:

func logTrace(_ message: @autoclosure () -> String, file: String = #file, line: Int = #line) { 
    #if DEBUG 
        let msg = message() 
        print("\(file):\(line): \(msg)") 
    #endif 
}