Objective Cの背景からNSLog()
を使用すると、テキストの前に日付タイムスタンプが付きますが、print()
を使用すると、Swiftのみが印刷されますテキスト
それで、タイムスタンプも印刷する方法がありますか、それとも何か間違っていますか?
print
はNSLog
ではないからです。それはそれと同じくらい簡単です。
NSLog
は、Appleコンソールに表示されるシステムログ機能)に書き込むFoundationのログツールです。
print(…)
は、Swiftデバッグセッションでコンソールに表示される標準出力に書き込む標準ライブラリの印刷関数です。
print
パラメーターにDate()
を追加して、現在の時刻と日付を出力できます。 (または、Date().description(with: Locale.current)
を使用して、ローカルタイムゾーンで取得します。)
または、Swiftも(Foundationをインポートする場合))で使用可能なNSLog
を使用することもできます。
スイフト:
NSLog("this will print with dates")
以下は、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!)
}
}
これは単純なタイムスタンプを出力するだけですが、必要に応じて簡単に変更して追加のテキストを含めることができます。
さらに、lazy
DateFormatter
に依存して、高価な初期化を回避します。
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)
PrintWithDate()などの印刷用の独自のクラス関数を作成し、出力に日付を追加します。その後、印刷するたびに日付を追加する必要なく、どこでもこれを使用できます。