如何解决条件绑定具有非'Bool'的可选类型?

问题描述 投票:0回答:2

我该如何解决这个问题?

我在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
    }

}
ios swift delegates boolean
2个回答
0
投票

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


0
投票

删除.isEmpty,确认它不是Bool的属性

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

    if gear {                               //Error
        filtered = filtered.whereField("category", isEqualTo: gear)
    }
© www.soinside.com 2019 - 2024. All rights reserved.