Сортировать массив по датам, хранящимся в виде строк - PullRequest
0 голосов
/ 21 мая 2019

У меня есть собственный объект Post, в котором хранится дата создания сообщения, и с помощью Firestore все объекты даты сохраняются в виде значений String.

У меня есть экран, который отображает все сообщения в виде таблицы, извлекая данные из базы данных для создания пользовательских объектов Post, а затем добавляя их в пользовательский массив, в котором хранятся сообщения

var postArray: Post

Как уже упоминалось, в каждом сообщении дата хранится в виде строки. Как отсортировать массив по дате (строка)?

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Создать вычисляемое свойство в структуре / классе Post для получения значения даты из строки

struct Post {
    var dateString: String
    private let dateFormatter = DateFormatter()
    var date: Date? {
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"//Change date format as per your string
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        return dateFormatter.date(from: dateString)
    }
}

Затем вы можете отсортировать массив по этому значению

let sortedArray = postArray.sorted { $0.date ?? .distantFuture < $1.date ?? .distantFuture}
0 голосов
/ 21 мая 2019

Вы можете сравнивать строку со знаками >, < по умолчанию, так как они сравниваются по алгоритму UNICODE COLLATION по умолчанию.

Подробнее см. Ответ @Martin R https://stackoverflow.com/a/38910703/6315441

Теперь, если все даты в каком-либо одном формате, это будет работать

let sortedPostArray = postArray.sorted(by: { $0.date > $1.date})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...