Если ваш сервер и клиенты всегда будут находиться в одном часовом поясе (и вы не возражаете против падения времени перехода на летнее время), вы можете отсортировать объекты без преобразования строк в даты.
Если у вас есть большое количество объектов, будет более эффективно отобразить сортируемое значение, к которому применяется регулярная сортировка, а не выполнять преобразование даты N * Log (N) раз.
Например:
func getSortKey(obj:MyObject) -> Date { return .... }
sortedObjects = objectList.map{($0,getSortKey($0))}.sorted{$0.1>$1.1}.map{$0.0}
Для ваших конкретных требований функция getSortKey (), вероятно, должна будет выбрать одну из двух дат из объекта, чтобы было только одно значение для сравнения.Я предполагаю, что вы захотите отсортировать объекты по самой последней из двух дат, чтобы функция могла возвращать что-то вроде этого (псевдокод):
var sortKey = Date.distantPast
if let serverDateString = obj.serverLastUpdated,
let serverDate = formatter.date(from: serverDateString)
{ sortKey = serverDate }
if let clientDateString = obj.clientLastUpdated,
let clientDate = formatter.date(from: clientDateString),
sortKey < clientDate
{ sortKey = clientDate }
return sortKey
Если у вас нет большого числаобъектов, вы можете использовать функцию непосредственно в сортировке:
sortedObjects = objectList.sorted{getSortKey($0)>getSortKey($1)}