web-dev-qa-db-fra.com

Pourquoi print () dans Swift n'enregistre pas l'horodatage en tant que NSLog dans l'objectif C

De l'arrière-plan de l'objectif C lorsque j'utilise NSLog() il préfixe le texte avec l'horodatage de la date, mais lorsque j'utilise print() le Swift il imprime uniquement le texte

Donc, il existe un moyen de lui faire imprimer l'horodatage également, ou est-ce que je fais quelque chose de mal?

37
Mahmoud Adam

Parce que print n'est pas NSLog. C'est aussi simple que ça.

NSLog est un outil de journalisation dans Foundation qui écrit dans la fonction Apple System Log) qui apparaît sur la console.

print(…) est une fonction d'impression dans la bibliothèque standard Swift qui écrit sur la sortie standard, qui apparaît sur la console dans les sessions de débogage.

Vous pouvez ajouter Date() à votre paramètre print pour imprimer l'heure et la date actuelles. (Ou Date().description(with: Locale.current) pour l'obtenir dans votre fuseau horaire local.)

Ou vous pouvez simplement utiliser NSLog qui est disponible dans Swift aussi (si vous importez Foundation).

45
Hermann Klecker

Swift:

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

Voici une fonction suggérée que vous pouvez utiliser à la place de 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

Celui-ci sort juste un horodatage simple, mais peut être facilement modifié pour inclure du texte supplémentaire si vous le souhaitez.

De plus, il s'appuie sur un lazyDateFormatter pour éviter des initialisations coûteuses.

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

Créez votre propre fonction de classe pour l'impression, par exemple printWithDate () et ajoutez la date à la sortie. Ensuite, vous pouvez l'utiliser partout sans avoir à ajouter la date à chaque fois que vous souhaitez imprimer.

1
totiG