Извиняюсь, если это очевидный вопрос, но я какое-то время назад создал приложение со Swift и периодически обновлял его, но каждый раз, возвращаясь к нему, я довольно ржавый.
У меня есть следующий код, который сортирует элементы по времени:
let dateFormat = DateFormatter()
dateFormat.dateFormat = "h:mm a"
items = items.sorted(by: {dateFormat.date(from: $0.time)! < dateFormat.date(from: $1.time)!})
Это нормально работает для устройств, использующих 12-часовое время, но выдает ошибку для устройств, использующих 24-часовое время (и, возможно, если в локали используется 12-часовое время, но не AM / PM?).
Изучив различные вопросы о переполнении стека и документацию для разработчиков, а также путем проб и ошибок, я обнаружил, что добавление следующей строки кода устраняет проблему:
dateFormat.locale = Locale(identifier: "en_US")
Если я сортирую по времени и указал свой формат даты, почему это имеет значение, какую локаль использует устройство? Когда DateFormatter документация говорит:
... обеспечивает представление указанной даты, которая является подходящей
для данного региона.
Означает ли это, что в каждом устройстве форматирования даты должен быть указан языковой стандарт, и, поскольку я не указал его в исходном коде, он принял языковой стандарт устройства? Следовательно, если пользователь использовал локаль, которая не поддерживает 12-часовые часы, он выдал ошибку?