Как исправить условное связывание у необязательного типа, а не 'Bool'? - PullRequest
0 голосов
/ 10 января 2020

как я могу решить эту проблему?

Я получаю ту же ошибку в 10 разных местах, я проводил тесты на ней и не могу понять это

спасибо в аванс за любую помощь, которую вы, ребята, предоставляете, это действительно много значит для меня

Инициализатор условного связывания должен иметь необязательный тип, а не 'Bool'

extension HomeController: FiltersViewControllerDelegate{
    func query(withCategory jewelry: Bool, shoe: Bool, hat: Bool, apearel: Bool, gear: Bool) -> Query {

        if jewelry == false && shoe == false && hat == false && apearel == false && gear == false {
            stackViewHeightConstraint.constant = 0
            activeFiltersStackView.isHidden = true
        } else {
            stackViewHeightConstraint.constant = 44
            activeFiltersStackView.isHidden = false
        }

        var filtered = baseQuery

        // Sort and Filter data
        if let jewelry = jewelry, !jewelry.isEmpty {                      //Error
            filtered = filtered.whereField("category", isEqualTo: jewelry)
        }
        //......more Filters....\\

        if let gear = gear, !gear.isEmpty {                               //Error
            filtered = filtered.whereField("category", isEqualTo: gear)
        }

        return filtered
    }

    func controller(_ controller: FilterViewController,
                      didSelectCategory jewelry: Bool,
                      shoe: Bool,
                      hat: Bool,
                      apearel: Bool,
                      gear: Bool) {

        if jewelry == false && shoe == false && hat == false && apearel == false && gear == false {
            stackViewHeightConstraint.constant = 0
            activeFiltersStackView.isHidden = true
        } else {
            stackViewHeightConstraint.constant = 44
            activeFiltersStackView.isHidden = false
        }

        let filtered = query(withCategory: jewelry, shoe: shoe, hat: hat, apearel: apearel, gear: gear)


        if let jewelry = jewelry, ! jewelry.isEmpty {                //Error
            jewelryFilterLbl.text = "Jewelry"
            jewelryFilterLbl.isHidden = false
        } else {
            jewelryFilterLbl.isHidden = true
        }

        //......more Filters....\\

        if let gear = gear, !gear.isEmpty {                          //Error
            gearFilterLbl.text = "gear"
            gearFilterLbl.isHidden = false
        } else {
            gearFilterLbl.isHidden = true
        }

        query = filtered
    }

}

Ответы [ 2 ]

1 голос
/ 10 января 2020

Удалить .isEmpty проверьте, что это не свойство Bool

    if jewelry {                      //Error
        filtered = filtered.whereField("category", isEqualTo: jewelry)
    }
    //......more Filters....\\

    if gear {                               //Error
        filtered = filtered.whereField("category", isEqualTo: gear)
    }
0 голосов
/ 10 января 2020

Вы используете if let привязку к переменным, которые не являются необязательными.

Например, ваша jewel переменная - Bool, а не Bool?. Использование необязательного связывания не имеет никакого смысла.

if let jewelry = jewelry, ! jewelry.isEmpty {  // Jewelry isn't an Optional!!!
    jewelryFilterLbl.text = "Jewelry"
    jewelryFilterLbl.isHidden = false
} else {
    jewelryFilterLbl.isHidden = true
}

Плюс, как заявили другие пользователи, Bool переменные не имеют .isEmpty метода. Пересмотрите свою логику c и свой код, она вообще не работает.

...