为什么Swift中的print()不像Objective C中的NSLog那样记录时间戳

juud5qan  于 2023-09-30  发布在  Swift
关注(0)|答案(6)|浏览(180)

从Objective C的背景来看,当我使用NSLog()时,它会在文本前面加上日期时间戳,但当我在Swift上使用print()时,它只会打印文本
那么是否有一种方法可以让它也打印时间戳,或者我做错了什么?

6ie5vjzr

6ie5vjzr1#

因为print不是NSLog。就这么简单。
NSLog是Foundation中的一个日志记录工具,可写入控制台上显示的Apple系统日志工具。
print(…)是Swift标准库中的一个print函数,它写入标准输出,在调试会话中出现在控制台上。
您可以将Date()添加到print参数以打印当前时间和日期。(或Date().description(with: Locale.current)以获得您当地的时区。
或者你可以使用NSLog,它也可以在Swift中使用(如果你导入Foundation)。

wtzytmuj

wtzytmuj2#

Swift:

NSLog("this will print with dates")
mi7gmzs6

mi7gmzs63#

这一个只是输出一个简单的时间戳,但可以很容易地修改,以包括额外的文本,如果你想。
此外,它依赖于lazyDateFormatter来避免昂贵的初始化。

import Foundation

class Timestamp {
    lazy var dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS "
        return formatter
    }()

    func printTimestamp() {
        print(dateFormatter.string(from: Date()))
    }
}

let timestamp = Timestamp()
timestamp.printTimestamp() // 2018-07-05 12:57:08.725
timestamp.printTimestamp() // 2018-07-05 12:57:08.727 (uses the same formatter)
bbuxkriu

bbuxkriu4#

这里有一个建议的函数,你可以用它来代替print()

func printLog(log: AnyObject?) {
    let formatter = NSDateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS "
    print(formatter.stringFromDate(NSDate()), terminator: "")
    if log == nil {
        print("nil")
    }
    else {
        print(log!)
    }
}
o7jaxewo

o7jaxewo5#

iOS 14+

新增os.Logger.log接口,可选level参数:https://developer.apple.com/documentation/os/logger/3551622-log

import os.Logger

log("Message \(var)")
log(level: .debug, "Message \(var)")

已弃用️

你可以在Swift中使用Logging os模块来实现:https://developer.apple.com/documentation/os/logging
os_loghttps://developer.apple.com/documentation/os/2320718-os_log

import os.log
os_log("Message %d", type: .info, value)
yws3nbqq

yws3nbqq6#

创建自己的打印类函数,例如printWithDate(),并在输出前添加日期。然后,您可以在任何地方使用它,而无需在每次打印时添加日期。

相关问题