Использование os_log для регистрации аргументов функции или других динамических данных - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь записать аргументы функции в os_log следующим образом:

func foo(x: String, y: [String:String]) {
    //...
    os_log("foo: \(x) \(y.description)", log: OSLog.default, type: .debug)
}

Но получаю ошибку:

Невозможно преобразовать значение типа 'String' в ожидаемоетип аргумента 'StaticString'

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

1 Ответ

0 голосов
/ 27 октября 2018

См. Регистрация :

Форматирование сообщений журнала

Для форматирования сообщения журнала используйте стандартную строку формата NSString или printf, ...

и Спецификаторы формата строки для стандартных спецификаторов строки формата, таких как %@ и %d.

В вашем случае:

os_log("foo: %@ %@", log: .default, type: .debug, x, y.description)

Строка формата ограничена статическими строками для предотвращения (непреднамеренное) расширение спецификаторов строки формата. Вот пример, демонстрирующий проблема с использованием NSLog(), потому что это не ограничивает формат в постоянные строки:

let s = "50%"
NSLog("\(s)percent")
// Output: 500x0ercent

%p ожидает указатель на список аргументов переменной, который не предоставлен. Это неопределенное поведение, оно может привести к сбоям или неожиданный вывод.

...