2015-10-27 1 views
26

Из фона Objective C, когда я использую NSLog(), он префикс текста с отметкой времени даты, но когда я использую print() в Swift, он печатает только текстПочему print() в Swift не регистрирует отметку времени как NSLog в объекте C

Так что есть способ заставить его распечатать отметку времени, или я что-то делаю неправильно?

+0

Я не особо уверен, но я уверен, что это имеет отношение к сделайте это с тем, что 'NSLog' печатает на консоли (и ваш журнал отображается в Console.app), но' print' в Swift этого не делает. – Arc676

+0

У меня нет доказательств, подтверждающих этот второй пункт, но я считаю, что Xcode фактически принимает информацию из Консоли и печатает все в определенной категории, даже если это не связано с программой, в которой вы работаете. Я видел некоторые неуместные сообщения консоли в моем Xcode. Может быть, Swift 'print' просто печатает на консоли Xcode? – Arc676

+4

проверить этот вопрос: http://stackoverflow.com/questions/25951195/swift-print-vs-println-vs-nslog – Kubba

ответ

30

Потому что print не NSLog. Это так просто.

NSLog - это инструмент ведения журнала в Foundation, который записывается в систему Apple System Log, которая появляется на консоли.

print(…) - функция печати в стандартной библиотеке Swift, которая записывается в стандартную версию, которая появляется на консоли в сеансах отладки.

Вы можете добавить Date() в свой print параметр, чтобы напечатать текущее время и дату. (Или Date().description(with: Locale.current), чтобы получить его в вашем местном часовом поясе.)

Или вы можете просто использовать NSLog, который также доступен в Swift (если вы импортируете Foundation).

+2

Спасибо, я попробовал 'NSLog', и он работает, поэтому я буду работать с ним в тех случаях, когда я необходимо указать временную метку –

1

Сделайте свою собственную функцию класса для печати, например printWithDate(), и добавьте дату к выходу. Затем вы можете использовать это везде, не добавляя дату каждый раз, когда хотите распечатать.

14

Swift:

NSLog("this will print with dates") 
3

Вот предлагается функция, которую вы можете использовать вместо печати()

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!) 
    } 
} 
+9

Создание экземпляра NSDateFormatter является дорогостоящим. Таким образом, в идеале, 'formatter' нужно было бы создать только один раз, вне вашего метода, чтобы избежать вызова NSDateFormatter() при каждом вызове метода. – Moritz

+0

Это не о том, что вы хотите - в этом случае это должно быть сделано. –

Смежные вопросы