Упорядочить массив строковой даты ("гггг-мм-дд чч: мм: сс.сссссс") по дате - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть массив, содержащий много значений

И каждое значение содержит dateAdd (не nil)

У меня есть func, где я сортирую массив, как показано ниже:

    func sortByDate(array: [TransactionValues]) -> [TransactionValues] {
    print(array)
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    let sortedArray = array.sorted { dateFormatter.date(from: $0.dateAdd)! < dateFormatter.date(from: $1.dateAdd)! }
    print(sortedArray)
    return sortedArray
}

Но происходит сбой с ошибкой:

Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения

$ 0.dateAdd - не ноль, либо как 1 доллар.dateAdd

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема в том, что вы используете неправильный формат даты при разборе строки даты.Формат даты для "2019-02-09 03:57:22.837371" должен быть "yyyy-MM-dd HH:mm:ss.SSSSSS" вместо "yyyy-MM-dd HH:mm:ss".И не забывайте всегда устанавливать языковой стандарт форматирования даты на en_US_POSIX при разборе строк с фиксированным форматом даты:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat =  "yyyy-MM-dd HH:mm:ss.SSSSSS"

Обратите внимание, что строки ISO8601 создаются способом, который также можно сортировать без необходимостибыть преобразовано в дату:

let sortedArray = array.sorted { $0.dateAdd < $1.dateAdd }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...