【问题标题】:Cannot convert value of type to expected argument type 'Bool'无法将类型的值转换为预期的参数类型“布尔”
【发布时间】:2018-05-02 03:42:30
【问题描述】:

从 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 {

}

错误画面:

【问题讨论】:

  • saint if 品牌你想说什么?错误说得很清楚,你只能在 if 关键字之后写一个 bool 变量或产生 bool 的语句
  • 通过使用这个 if 语句,您正在检查 brand 是否为真,但 brand 不是 Bool 类型。你到底想达到什么目的?
  • @UmairAfzal 我更新了我的 Objective C 代码
  • 添加一个像“brand != nil”这样的检查怎么样,这将是一个布尔检查,而不是直接检查品牌。

标签: swift


【解决方案1】:

您需要做的是快速阅读有关可选选项的信息。

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) 可以是一个可选的,这意味着它可以保存 nil 值。通过使用 if 让我们确保在 if 块中,brand 的值永远不会为零。

但是假设我们不想在块内使用它,而是在函数中的任何地方使用它。然后我们可以使用guard

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

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

【讨论】:

  • 更简单:if let imageName = GymBrand.brandForName(name:self.gym.brand)?.logoImageName { ...
【解决方案2】:

这样你可以这样做:(如我所见,你使用的是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 {

        }

【讨论】:

  • as? String(很可能还有as? GymBrand)是多余的,如果logoImageName 无论如何都是可选的并且let _ 没有帮助,因为该变量在if 子句中明确使用。
【解决方案3】:

您的代码在 swift 中的真实面貌是这样的:

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

} else {

}

【讨论】:

  • 由于logoImageName 将在if 子句中使用,它实际上并不是您的代码在swift 中的真实面目 ?
猜你喜欢
  • 1970-01-01
  • 2016-07-27
  • 2016-07-02
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 2016-08-01
  • 2017-02-07
相关资源
最近更新 更多