Если исходный массив не имеет сортируемого порядка, я советую вам никогда не изменять исходный массив.Сохраните второй массив, основанный на текущей сортировке, и используйте этот второй массив как основу модели данных представления коллекции.
Когда пользователь выбирает другой метод сортировки, вы просто обновляете второй массив из исходного, немодифицированный массив, а затем перезагрузите представление сбора.
let allAnimalsArray = ... // the original array that you never modify
var sortedArray = [YourAnimalClass]()
Все ваши методы источника данных основаны на sortedArray
.
Если пользователь выбирает «не сортировать», тогда вы делаете:
sortedArray = allAnimalsArray
allAnimalsCollectionView.reloadData()
Если пользователь выбирает один из видов, то вы делаете:
sortedArray.allAnimalsArray.sorted(by: { $0.whatever < $1.whatever })
allAnimalsCollectionView.reloadData()