DateFormatter в iOS принадлежит для просмотра модели или модели или контроллера? - PullRequest
0 голосов
/ 17 мая 2018

Может ли кто-нибудь подтвердить, что DateFormatter в iOS (Swift) принадлежит к какому уровню архитектуры, например ViewModel, модели или контроллеру?

Ответы [ 5 ]

0 голосов
/ 17 мая 2018

У вас может быть что-то вроде этого:

enum FormatDateTimeType {
 case time
 case shortDate
}

extension Date {
 func string(_ formattedAs: FormatDateTimeType) {
     .......
 }
}

тогда ваш текстовый компонент должен использовать функцию 'string' date следующим образом:

myTextField.text = myModel.date.string(.shortDate)
0 голосов
/ 17 мая 2018

Несмотря на ответы, опубликованные здесь, мы должны немного глубже изучить этот конкретный случай.Форматер даты - это инструмент для преобразования даты (отметки времени) в визуальное представление этой отметки времени в виде строки.В некотором смысле это дескриптор того, как представить информацию.На мой взгляд, он ближе к, например, 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 должно быть в некотором статическом контексте, в то время как дажеописание формата должно быть как можно ближе к самому представлению.

0 голосов
/ 17 мая 2018

В основном любые изменения, которые вы вносите в модель или получаете какие-либо данные из модели, должны идти в viewModel. Следовательно, вы должны иметь формат даты в viewModel

0 голосов
/ 17 мая 2018

ViewModel

работает как посредник между моделью и представлением, ViewModel обеспечивает связь между бизнес-логикой и контроллером представления / представления.

Представление (UI) реагирует на ввод пользователя, передавая входные данные (определяемые моделью) в viewModel. В свою очередь ViewModel оценивает входные данные и отвечает соответствующим представлением пользовательского интерфейса в соответствии с рабочим процессом бизнес-логики. Кроме того, модель представления будет инициировать все вызовы для отправки и получения данных (с использованием менеджеров данных), а также любые манипуляции с данными, чтобы подготовить их к отображению в представлениях.

Вы можете найти полный ответ ниже по ссылке

MVVM против MVC

0 голосов
/ 17 мая 2018

Должно быть при просмотре модель:

The ViewModel encapsulates data/properties that the view can bind to and any validation logic and actions that can be performed.Обычно ViewModel взаимодействует с моделью, вызывая методы в классах модели. Затем ViewModel предоставляет данные из модели в форме, которую представление может легко использовать .В этом паттерне мы по сути берем состояние нашего приложения и помещаем его во ViewModel.

...