Вы создаете форматеры даты внутри вашего метода, что может быть дорого. Возможно, вы захотите сохранить оба в static:
extension DateFormatter {
static let iso8601Full: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
formatter.calendar = Calendar(identifier: .iso8601)
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.locale = Locale(identifier: "en_US_POSIX")
return formatter
}()
static let dateOnly: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "dd/MM/yyyy"
return formatter
}()
static func string(iso string: String) -> String {
let date = DateFormatter.iso8601Full.date(from: string)!
return DateFormatter.dateOnly.string(from: date)
}
}
И тогда вы можете сделать:
row.creationDateLabel.setText(DateFormatter.string(iso: value.creationDate))
Это более кратко и позволяет избежать избыточного создания экземпляров форматеров.
Лично, вместо использования dateFormat
внутри dateOnly
, я бы использовал dateStyle
, поэтому строка даты (предположительно показанная в пользовательском интерфейсе) правильно локализована, но вы можете делать все, что захотите.
(Кстати, я набрал это на своем телефоне, поэтому я прошу прощения, если есть какие-либо синтаксические ошибки, но, надеюсь, это иллюстрирует основную идею.)
Если creationDate
уже является Date
, вам не нужно ничего из этого специфичного для iso материала. Я основывал свой ответ на вашем методе, который в качестве параметра принимал String
. Если это уже Date
, то просто:
row.creationDateLabel.setText(DateFormatter.dateOnly.string(from: value.creationDate))