Swift语言中有没有等效的logtrace?
我不想使用桥头概念。
我想要实现的目标是,我希望println语句在应用程序的开发/暂存阶段写入控制台,并且在切换开关时,应该在推送到应用程序商店之前停止控制台打印。 / p>
另一个想法是,println在发行期间是否自动停止在控制台上打印? (可能是迁移到Swift的奖励)
答案 0 :(得分:3)
您可以采用与内置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"到#34;其他Swift Flags"为了 调试配置,比较
此方法的优势是(与assert()
一样)块不是
在发布配置中进行评估,其中" DEBUG"没有定义,例如在
logTrace ( someFunctionReturningAString() )
在Release配置中不会调用该函数,因此任何副作用 或者避免性能开销。
更新 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
}