Logtrace相当于Swift语言 - iPhone

时间:2014-11-09 12:40:02

标签: ios iphone swift

Swift语言中有没有等效的logtrace?

我不想使用桥头概念。

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

另一个想法是,println在发行期间是否自动停止在控制台上打印? (可能是迁移到Swift的奖励)

1 个答案:

答案 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"为了 调试配置,比较

enter image description here

此方法的优势是(与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
}