Как организовать форматтеры в разных файлах исходного кода

Есть ли хороший/аккуратный способ организовать средства форматирования, которые повторяются в разных файлах? Мне приходится реализовывать одни и те же строки кода для разных классов. Должен ли я просто поместить повторяющийся код в отдельный файл и предоставить ему глобальный доступ? Лучше ли создать класс/структуру для хранения этих средств форматирования? Возможно, я слишком много думаю об этом, но я хотел бы изучить хороший метод и придерживаться его, работая над разными проектами.

Например, повторяющийся код выглядит так:

let dateFormatter: DateFormatter = {
   let formatter = DateFormatter()
   formatter.dateFormat = "MM/dd/yyyy"
   return formatter
}()

person joooerhooo    schedule 24.06.2020    source источник


Ответы (1)


Вы можете расширить класс Formatter и объявить форматировщики даты как статические свойства. Таким образом, вы можете получить доступ к одному и тому же их экземпляру в любом месте вашего кода. Обратите внимание, что вы не должны использовать фиксированный формат при отображении даты для пользователя. Вы должны использовать стиль даты и времени, чтобы отображать его локализованным на основе языкового стандарта и настроек пользовательского устройства. Кстати, при использовании фиксированного формата даты вы должны установить локаль en_US_POSIX:

extension Formatter {
    static let mmddyyyy: DateFormatter = {
        let formatter = DateFormatter()
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.dateFormat = "MM/dd/yyyy"
        return formatter
    }()
    static let shortDate: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateStyle = .short
        return formatter
    }()
    static let mediumDate: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateStyle = .medium
        return formatter
    }()
}

Formatter.mmddyyyy.string(from: Date())      // "06/24/2020"
Formatter.shortDate.string(from: Date())     // "6/24/20"
Formatter.mediumDate.string(from: Date())    // "Jun 24, 2020"
person Leo Dabus    schedule 25.06.2020