2017-02-22 2 views
1

Скажем, у вас есть дата форматчик, который является глобальнойНастройка для форматирования даты (например) во время инициализации?

let df:DateFormatter = DateFormatter() 

В идеале было бы хорошо, чтобы сделать установку .dateFormat в то же время глобальные инициализации - вроде этого

let df:DateFormatter = DateFormatter().dateFormat = "yyyy-MM-dd" 

Но нет никакой альтернативы инициализация для DateFormatter (нет ничего подобного DateFormatter(withDateFormat: "yyyy-MM-dd"))

Действительно, есть ли быстрое решение? Есть ли синтаксис для блока кода вне любого класса, который запускается раньше всего и в котором вы можете настроить такие вещи?

(Примечание - Я полностью в курсе альтернативных подходов, таких как одиночек, расширение и т.д.:. Это Свифт структура вопрос, спасибо)

+0

http://stackoverflow.com/a/28347285/2303865 –

+0

Обратите внимание, что предпочтительнее использовать стиль даты и времени (с hort, medium, long или full), которые будут локализованы для пользователя, а не форсировать dateFormat, если вы намерены отобразить его пользователю. –

+0

Первая ссылка показывает, что именно вадиан ответил, но объявлен как статический внутри Дата –

ответ

4

Используйте замыкание, чтобы сделать ваши настройки

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

Однако вам не рекомендуется использовать нераскрытые глобальные переменные.

+0

блестящий! nice ... – Fattie

+0

Чтобы быть абсолютно абсолютно ясным: это закрытие просто запускает один раз (я думаю, буквально, когда iOS запускает приложение). Нет никаких обстоятельств, когда он будет работать снова, когда используется df? (Я просто немного быстро проверил, но, хотя я бы спросил.) Спасибо! – Fattie

+0

Да, он работает один раз. – vadian

-1

Вы можете создать свой собственный класс для этого, как:

class myDateformatter : DateFormatter { 

    override init() { 
     super.init() 
     self.dateFormat = "yyyy-MM-dd" 
     let timeZone = TimeZone(identifier: "UTC") 
     self.timeZone = timeZone 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 
+0

из вопроса: (Примечание - я полностью осведомлен об альтернативных подходах, таких как синглтоны, расширение и т. Д.: Это вопрос строгой структуры, спасибо.) – Fattie

-1

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

extension DateFormatter { 
    convenience init(dateFormat: String) { 
     self.init() 
     self.dateFormat = dateFormat 
    } 
} 

Использование:

let dateFormatter = DateFormatter(dateFormat: "yyyy-MM-dd") 
dateFormatter.date(from: "2017-02-22") 
+0

вопрос: (Примечание - я полностью осведомлен о альтернативные подходы, такие как синглтоны, расширение и т. д.: это вопрос строгой структуры, спасибо.) – Fattie

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