То, что вы хотите сделать, это создать новую переменную уровня класса, которая будет содержать отсортированный массив. Затем пусть ваш collectionView использует этот массив для своих данных.
Добавьте это в свой класс:
// original array
var dispositivosTodos: [Dispositivos] = [Dispositivos]()
// this will hold the sorted array
var dispositivosSorted: [Dispositivos] = [Dispositivos]()
и измените cellForItemAt
на что-то вроде этого:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
// use Sorted array, not Todos array
cell.myData = dispositivosSorted[indexPath.item]
return cell
}
и ваше filters()
веселье c будет изменено на что-то вроде этого:
@IBAction func filtros(_ sender: Any) {
guard let sc = sender as? UISegmentedControl else { return }
let getIndex = sc.selectedSegmentIndex
switch (getIndex) {
case 0:
print("barato")
dispositivosSorted = dispositivosTodos.sorted(by: { $0.precio_dispositivo < $1.precio_dispositivo })
case 1:
print("caro")
dispositivosSorted = dispositivosTodos.sorted(by: { $0.propertyB_dispositivo < $1.propertyB_dispositivo })
case 2:
print("reciente")
dispositivosSorted = dispositivosTodos.sorted(by: { $0.propertyC_dispositivo < $1.propertyC_dispositivo })
case 3:
print("cercano")
dispositivosSorted = dispositivosTodos.sorted(by: { $0.propertyD_dispositivo < $1.propertyD_dispositivo })
default:
print("no filtro")
dispositivosSorted = dispositivosTodos
}
collectionView.reloadData()
}