二进制运算符 '==' 不能应用于类型为 'UIImage?' 和 'String' 的操作数 - Swift 4



我正在制作一个汽车测验应用程序,用户将尝试将模型与品牌(make)相匹配。模型和品牌都以UIImages的形式呈现。

let carModelList = ["Camaro",
                    "Mustang",
                    "Challenger"]
let carBrandList = ["Chevy",
                    "Ford",
                    "Dodge"]

我需要检查用户是否进行了正确的匹配。我是通过比较数组索引来做到这一点的...

if carModel.image == carModelList[0] && carBrand.image == carBrandList[0] {

在这个例子中,将有一个正确的匹配,因为Camaro是由雪佛兰制造的。

但是,我收到此错误...

二进制运算符"=="不能应用于类型为"UIImage?"和"字符串"的操作数

因此,我尝试将数组更改为...

var carModelList: [UIImage] = [
    UIImage(named: "Camaro")!,
    UIImage(named: "Mustang")!,
    UIImage(named: "Challenger")!
]
var carBrandList: [UIImage] = [
    UIImage(named: "Chevy")!,
    UIImage(named: "Ford")!,
    UIImage(named: "Dodge")!
]

但是,在我的两行代码中,随机选择要呈现给用户的图像......

carModel.image = UIImage(named: carModelList.randomElement()!)
carBrand.image = UIImage(named: carBrandList.randomElement()!)

我收到此错误...

无法将类型"UIImage"的值转换为预期的参数类型"字符串"

您会看到该消息,因为您确实在尝试传递图像,但构造函数需要图像的名称,这是一个字符串。

如果你想这样称呼它:

carModel.image = UIImage(named: carModelList.randomElement()!)
carBrand.image = UIImage(named: carBrandList.randomElement()!)

你的数组必须看起来像这样:

var carModelList: [String] = [
    "Camaro",
    "Mustang",
    "Challenger"
]
var carBrandList: [String] = [
    "Chevy",
    "Ford",
    "Dodge"
]

另一种选择是使用图像数组来调用它:

carModel.image = carModelList.randomElement()!
carBrand.image = carBrandList.randomElement()!

确保避免强制展开。

此外,您的字符串数组和 UIImage 数组具有相同的内容,如果要比较它们,请重命名它们。

问题是你使用

let carModelList = ["Camaro",
                "Mustang",
                "Challenger"]
 let carBrandList = ["Chevy",
                "Ford",
                "Dodge"]

var carModelList: [UIImage] = [
    UIImage(named: "Camaro")!,
    UIImage(named: "Mustang")!,
    UIImage(named: "Challenger")!
]
var carBrandList: [UIImage] = [
    UIImage(named: "Chevy")!,
    UIImage(named: "Ford")!,
    UIImage(named: "Dodge")!
]

使用相同的数组名称,这就是为什么当你做 == swift 无法理解你正在使用哪个数组名称

相关内容