Фильтр запросов с большими данными из пожарного магазина - PullRequest
0 голосов

Как избежать написания большого количества кода при использовании фильтра с использованием 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 с использованием минимального кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...