Несмотря на ответы, опубликованные здесь, мы должны немного глубже изучить этот конкретный случай.Форматер даты - это инструмент для преобразования даты (отметки времени) в визуальное представление этой отметки времени в виде строки.В некотором смысле это дескриптор того, как представить информацию.На мой взгляд, он ближе к, например, font
, который обычно находится в представлении.
Если вы используете модель представления в нескольких ситуациях, это может означать, что вам может потребоваться несколько разных представлений одних и тех же данных.Например, та же модель может использоваться в ячейке табличного представления, чтобы использовать только дату.Затем нажатие на ячейку может открыть новый экран, представляющий ту же модель, показывающую дату и время или даже возраст даты.
С этой точки зрения (не то, чтобы я неправильно это понял), я бы предпочел поместить средство форматирования даты в представлениеили на контроллере представления.Отображение подкласса UILabel
, который предоставляет свойства для dateFormat
и date
, который используется для отображения только одной даты.
Еще одна очень важная вещь, которую нужно знать, это то, что форматеры даты крайне медленны при их инициализации.Поэтому, если возможно, мы стараемся использовать инструменты, которые хранят наши средства форматирования даты в статическом контексте, где они могут использоваться повторно.Некоторые делают инструменты, такие как DataTools.timeString(fromDate: myDate)
другие расширения на Date
, чтобы иметь myDate.timeString
.Некоторые даже перечисляют форматеры, что приводит к myDate.string(formattedAs: .time)
.
. Вероятно, лучше использовать последний подход, так как вы можете использовать свои форматы даже в качестве свойств.Теперь вам нужно в основном выбрать то, что вам больше подходит:
timeLabel.text = model.date.string(formattedAs: .time)
dateLabel.text = model.date.string(formattedAs: .shortDate)
или
timeLabel.text = model.dateStringFormattedAsTime
dateLabel.text = model.dateStringFormattedAsShortDate
Так что, если вы спросите меня, DateFormatter
должно быть в некотором статическом контексте, в то время как дажеописание формата должно быть как можно ближе к самому представлению.