Pull to refresh

Comments 4

Спасибо, совсем забыл про dump :)

Добавлю, что Apple не рекомендует делать свои функции-обёртки вокруг OSLog / Logger, т.к., во-первых, они оптимизированы для того, чтобы лениво формировать сообщения в фоне (Вы в методе formLog создаёте formattedMessage сами), а во-вторых, позволяют прямо из сообщения в логе перейти в то место в коде, где оно было залогировано. Если вокруг системных функций сторонняя обёртка, кидать будет всегда в эту обёртку.

Спасибо, хорошее замечание по поводу обертки! С учетом того, что мы используем логи только в дебаг-режиме, это не влияет на производительность критичным образом, однако, вызов функции стоит действительно вынести и воспользоваться советом Apple :)

Там, кстати, на самом деле вообще всё интересно :)

Для реализации нативного Swift-логирования хаки зашиты прямо в компиляторе. Я уже не помню подробностей того, что я хотел сделать, но, вроде бы, я хотел иметь либо свою обёртку вокруг системного логгера, которая прокидывает ему все параметры вроде точки вызова и т.д. (ведь наверняка это реализовано через неявные параметры, думал я), либо сделать протокол, повторяющий интерфейс системного логгера, "подписать" системный логгер под этот протокол через extension, и таким образом иметь возможно работать везде с протоколом с простой возможностью подменить реализацию во время выполнения. Но оказалось, насколько я помню, что невозможно перебросить параметры в системный логгер, даже если у нас функция объявлена точно так же, потому что для системного логгера выполняется какая-то особая компиляторная магия.

В итоге я удовольствовался typealias. У меня есть свой логгер, который повторяет интерфейс системного, и я повсюду пользуюсь alias-ом. Когда нужно, alias указывает на системный логгер, когда нужно – на кастомный. Но в динамике, понятное дело, уже не переключишь.

typealias звучит как хороший выход из ситуации)

Sign up to leave a comment.