Как в Swift (5) передать параметр "Any..." в оператор print() без его печати в виде массива?

У меня есть глобальное перечисление, которое я использую для глобальных функций, которые я хочу запускать только во время отладки приложения. Это выглядит примерно так:

public enum Debug {
    static func print(_ items: Any..., separator: String = " ", terminator: String = "\n") {
        #if DEBUG
        Swift.print(items, separator: separator, terminator: terminator)
        #endif
    }
}

Однако когда я использую

Debug.print(35)

выход

["35"]

Я хочу, чтобы вывод выглядел так же, как обычный оператор печати:

35

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

Похоже, мне нужно "распаковать" items параметр и поместите каждый из них в оператор печати по отдельности, но это кажется неправильным подходом.

public enum Debug {
    static func print(_ items: Any..., separator: String = " ", terminator: String = "\n") {
        #if DEBUG
        for item in items {
            Swift.print(item, terminator: separator)
        }
        Swift.print("", terminator: terminator)
        #endif
    }
}

Это работает... но заставляет меня съеживаться. Должно быть лучшее решение...

1 ответ

Решение

Вы можете просто отобразить свои элементы в строки, соединить их с разделителем и распечатать получившуюся строку:

public enum Debug {
    static func print(_ items: Any..., separator: String = " ", terminator: String = "\n") {
        #if DEBUG
        Swift.print(items.map({String(describing: $0)}).joined(separator: separator), terminator: terminator)
        #endif
    }
}

Или просто:

Другие вопросы по тегам