Как избежать написания большого количества кода при использовании фильтра с использованием firestore
?
Я использую tableView
и didSelect
метод для сбора данных, чтобы начать использовать фильтр
Теперь у меня есть около 100+ параметров для фильтра. И мои параметры в tableViewCell
. Когда я собираю меня нужно передать мои выбранные параметры в пожарном магазине query
.
Теперь мой код выглядит так:
protocol FilterTableViewControllerDelegate: NSObjectProtocol {
func controller(_ controller: FilterTableViewController,
didSelectCategory childrensInterior: String?,
imitationKitchenInterior: String?,
loftInterior: String?,
retroInterior: String?,
cycloramaAccessories: String?,
bedAccessories: String?,
...+50 parameters
bathAccessories: String?,
fireplaceAccessories: String?,
swingAccessories: String?,
LargeWindowsOpporunities: String?,
minPriceLabel: Int?,
maxPriceLabel: Int?)
}
class FilterTableViewController: UITableViewController {
private var sections: [Section] = []
weak var delegate: FilterTableViewControllerDelegate?
static func fromStoryboard(delegate: FilterTableViewControllerDelegate? = nil) -> (navigationController: UINavigationController, filtersController: FilterTableViewController) {
let navController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "FilterViewController") as! UINavigationController
let controller = navController.viewControllers[0] as! FilterTableViewController
controller.delegate = delegate
return (navigationController: navController, filtersController: controller)
}
@IBAction func applyButton(_ sender: Any) {
delegate?.controller(self, didSelectCategory: childrensInterior,
imitationKitchenInterior: imitationKitchenInterior,
loftInterior: loftInterior,
retroInterior: retroInterior,
cycloramaAccessories: cycloramaAccessories,
bedAccessories: bedAccessories,
...+50 parameters
bathAccessories: bathAccessories,
fireplaceAccessories: fireplaceAccessories,
swingAccessories: swingAccessories,
LargeWindowsOpporunities: LargeWindowsOpporunities,
minPriceLabel: Int(minPriceLabel.text!),
maxPriceLabel: Int(maxPriceLabel.text!))
navigationController?.dismiss(animated: true, completion: nil)
}
}
Например, сейчас я собираю вещи по одному:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if indexPath.section == 0 {
if indexPath.row == 0 {
self.imitationKitchenInterior = "imitationKitchenInterior"
} else if indexPath.row == 1 {
self.loftInterior = "loftInterior"
}
} else if indexPath.section == 1 {
if indexPath.row == 0 {
self.swingAccessories = "swingAccessories"
}
}
and etc...
}
Как не нарисовать изменение каждого параметра в методе didSelect
? Или, может быть, мне нужно использовать dictionary
или array
для отображения данных в tableView
и использовать dictionary
или array
для сбора данных для передачи в query firestore
? И как я могу применить собранные данные для передачи в query firestore
с использованием минимального кода?