Вот как бы я подошел к проблеме.Предполагая, что у меня есть источник данных, который будет содержать элементы без применения какого-либо фильтра.(На практике это не так, как было бы, вы, вероятно, получили бы свой источник данных через сетевые вызовы). Как только пользователь применяет или удаляет фильтр, устанавливая или снимая флажок, я фильтрую источник данных с помощью активных фильтров.
Допустим, это ваш класс предметов.
class Item {
var category: Category
var color: Color
}
enum Category {
case one
case two
.
.
case none
}
// Similarly for color and other parameters
Теперь это будет ваш объект фильтра, который поддерживает все активные фильтры.
class FilterParameters {
var category: [Category]? = nil
var color: [Color]? = nil
}
Создать объектэтого класса и каждый раз, когда фильтр отмечен или не отмечен, фильтруйте ваш источник данных с текущими активными фильтрами.(Если фильтр не выбран, игнорируйте этот фильтр и создайте параметры фильтра на основе тех, которые у вас есть).