Я бы использовал регулярное выражение для извлечения строки даты, преобразования ее в дату и вычисления по ней. Как это:
let array = [
"Jones John 05-12-1993 Diabetes *05-13-2019 **R ***No Data ****68xxx",
"Smith John 05-12-2019 Hypertension *05-12-2019 **R ***05-12-2019 ****117xx",
"Smithers John 05-12-1947 COPD *05-13-2019 **R ***05-13-2019 ****89xxx",
"Wilson John 05-13-2019 Atrial Fibrillation *05-13-2019 **R ***05-16-2019 ****90xxx",
"Davis Joe 05-23-1905 Hypertension *05-25-2019 **R ***05-23-2019 ****42xxx"
]
let patt = " \\*\\d\\d\\-\\d\\d\\-\\d\\d\\d\\d"
let regex = try! NSRegularExpression(pattern: patt, options: [])
let f = DateFormatter()
f.dateFormat = "mm/dd/yyyy"
let array2 = array.map { s -> Date in
let r =
regex.firstMatch(in: s, options: [], range: NSRange(s.startIndex..., in: s))!.range
let ss =
(s as NSString).substring(with: NSRange(location: r.location+2, length: r.length-2))
return f.date(from:ss)!
}
let sorted = zip(array,array2).sorted{$0.1 < $1.1}.map{$0.0}
Результат
[
"Smith John 05-12-2019 Hypertension *05-12-2019 **R ***05-12-2019 ****117xx",
"Jones John 05-12-1993 Diabetes *05-13-2019 **R ***No Data ****68xxx",
"Smithers John 05-12-1947 COPD *05-13-2019 **R ***05-13-2019 ****89xxx",
"Wilson John 05-13-2019 Atrial Fibrillation *05-13-2019 **R ***05-16-2019 ****90xxx",
"Davis Joe 05-23-1905 Hypertension *05-25-2019 **R ***05-23-2019 ****42xxx"
]
... что, я думаю, вы согласитесь, это правильный ответ, основанный на ваших словах.
Однако, как уже говорили другие, исходная проблема в том виде, как она изложена, глупа. Вы не должны иметь дело с этими структурированными строками в первую очередь. Вы должны разобрать их в пользовательскую структуру в самом начале и вместо этого работать с экземплярами этой структуры.