web-dev-qa-db-ja.com

Swift=のprint()が目的CのNSLogとしてタイムスタンプを記録しない理由

Objective Cの背景からNSLog()を使用すると、テキストの前に日付タイムスタンプが付きますが、print()を使用すると、Swiftのみが印刷されますテキスト

それで、タイムスタンプも印刷する方法がありますか、それとも何か間違っていますか?

37
Mahmoud Adam

printNSLogではないからです。それはそれと同じくらい簡単です。

NSLog は、Appleコンソールに表示されるシステムログ機能)に書き込むFoundationのログツールです。

print(…) は、Swiftデバッグセッションでコンソールに表示される標準出力に書き込む標準ライブラリの印刷関数です。

printパラメーターにDate()を追加して、現在の時刻と日付を出力できます。 (または、Date().description(with: Locale.current)を使用して、ローカルタイムゾーンで取得します。)

または、Swiftも(Foundationをインポートする場合))で使用可能なNSLogを使用することもできます。

45
Hermann Klecker

スイフト:

NSLog("this will print with dates")
23
Juan Boero

以下は、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!)
    }
}
5
david72

これは単純なタイムスタンプを出力するだけですが、必要に応じて簡単に変更して追加のテキストを含めることができます。

さらに、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)
4
CodeBender

PrintWithDate()などの印刷用の独自のクラス関数を作成し、出力に日付を追加します。その後、印刷するたびに日付を追加する必要なく、どこでもこれを使用できます。

1
totiG