无法将类型的值转换为预期的参数类型'Bool'

时间:2018-05-01 18:45:19

标签: swift

从Objective-C转换后,我在Swift中面临问题。任何人都可以帮我解决这个问题吗?

let brand: GymBrand =  GymBrand.brandForName(name:self.gym.brand)
if brand && brand.logoImageName {

} else {

}

我的Objective-C代码:

GYMBrand *brand = [GYMBrand brandForName:self.gym.brand];
if (brand && brand.logoImageName) {  

}else {

}

错误屏幕:

enter image description here

3 个答案:

答案 0 :(得分:2)

你需要做的是阅读swift中的选项。

Developer Apple

Tutorialpoint

这些是阅读的一些很好的参考。有两种主要方法可以达到你想要的效果。

if let brand =  GymBrand.brandForName(name:self.gym.brand) ,

    let imageName = brand.logoImageName {

        //brand is never nil here
        //brand.logoImageName is never nil here
    } else {

    }

我们在这里做的是假设GymBrand.brandForName(name:self.gym.brand)可以是可选的,这意味着它可以保持零值。通过使用if,我们确保if块内的品牌价值永远不会为零。

但是我们可以说我们不想在块内部使用它,而是在函数中使用它。然后我们可以使用guard

guard let brand =  GymBrand.brandForName(name:self.gym.brand) ,let imageName = brand.logoImageName else {

        //brand is nil here
        //brand.logoImageName is nil here
    }

答案 1 :(得分:1)

这样你可以这样做:(我可以看到,你使用的是brand.logoImageName所以你必须使用这种方式)

if let brand =  GymBrand.brandForName(name:self.gym.brand) as? GymBrand, let _ = brand.logoImageName as? String{
            //brand is never nil here
            //brand.logoImageName is never nil here
        } else {

        }

答案 2 :(得分:0)

swift中代码的真实面目是:

if let brand =  GymBrand.brandForName(name:self.gym.brand), brand.logoImageName != nil {

} else {

}