#swift #string #sorting #optional
#swift #строка #сортировка #тип параметра
Вопрос:
Я пытаюсь отсортировать массив в swift типа ‘ObjCClass’, который является классом objective c. ‘ObjCClass’ имеет свойство ‘name’, которое является необязательным для типа String. Я хочу отсортировать объекты в массиве в порядке возрастания на основе свойства ‘name’. Как я могу это сделать без принудительного разворачивания?
Я пытался использовать это:
var sortedArray = unsortedArray.sorted(by: { $0.name as String! < $1.name as String!})
Я пытался использовать инструкции guard и if / let, чтобы проверить, существует ли свойство ‘name’, но я продолжаю сталкиваться с ошибками, поскольку не думаю, что делаю это правильно. Как я могу проверить, существует ли свойство для каждого объекта в массиве, а затем выполнить сортировку?
Комментарии:
1. Записи с нулевым именем, я просто хочу пропустить их и не иметь их в моем отсортированном массиве.
Ответ №1:
Сначала отфильтруйте ненужные записи, затем сравните name
с принудительным развертыванием
var sortedArray = unsortedArray
.filter { $0.name != nil }
.sorted { $0.name! < $1.name! }
ПРИМЕЧАНИЕ:
- Принудительное разворачивание прекрасно подходит в этом случае, потому что
filter
удаляетnil
регистры, и к тому времени, когда мы перейдем кsorted
,name
должно присутствовать