Swift 语言中是否有任何等效的日志跟踪?
我不想使用桥头概念。
我想要实现的目标是,我希望 println 语句在应用程序的开发/暂存阶段写入控制台,并且通过轻按开关,控制台打印应该在推送到应用程序商店之前停止。
换个思路,println 会在分发期间自动停止在控制台上打印吗? (可能是迁移到 Swift 的好处)
最佳答案
您可以采用与内置 assert()
函数类似的方法,即
在 Swift 博客中解释:
- Building assert() in Swift, Part 1: Lazy Evaluation
- Building assert() in Swift, Part 2: FILE and LINE
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
}
关于ios - Swift 语言中的 Logtrace 等价物 - iPhone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26828261/