如何修复条件绑定的可选类型不是 'Bool'?

How to fix conditional binding have optional type not 'Bool'?

我该如何解决这个问题?

我在 10 个不同的地方遇到了同样的错误,我已经对其进行了 运行 测试,但似乎无法理解

提前感谢你们提供的任何帮助,这对我来说真的很重要

条件绑定的初始化器必须是 Optional 类型,而不是 '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
    }

}

删除 .isEmpty 检查它不是 Bool

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

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

您正在对非可选变量使用 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 方法。修改你的逻辑和你的代码,它根本不起作用。