在Swift语言 – iPhone中相当于Logtrace

在Swift语言中是否有任何logtrace等价物?

我不希望使用桥头概念。

我试图实现的目标是,我希望println语句在应用程序的开发/暂存阶段写入控制台,并且随着开关的翻转,控制台打印应该在推送到应用程序商店之前停止。

在另一个思路上,println会在分发过程中自动停止在控制台上的打印吗? (可能是迁移到Swift的奖励)

您可以采用类似于Swift博客中所述的内置assert()函数的方法:

  • 在Swift中构buildassert(),第1部分:懒惰评估
  • 在Swift中构buildassert(),第2部分: FILELINE

logTrace函数采用“自动closures”作为第一个参数:

 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 Flags”的debuggingconfiguration,比较

  • 在没有预处理器macros的情况下,是否有办法在Xcode项目中的项目级别定义实际的特定于scheme的标志 。

在这里输入图像说明

这个方法的优点是(和assert() ),在Releaseconfiguration中没有对块进行评估,其中“DEBUG”没有被定义,例如在

 logTrace ( someFunctionReturningAString() ) 

该function在Releaseconfiguration中不会被调用,所以可以避免任何副作用或性能开销。


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 }