Сортировка массива пользовательских объектов на основе необязательного свойства string в Swift

#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 должно присутствовать