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

时间:2019-01-17 19:59:15

标签: swift string uiimageview uiimage

我正在制作一个汽车测验应用程序,用户将尝试将模型与品牌(制造商)进行匹配。模型和品牌都以UIImages的形式显示。

let carModelList = ["Camaro",
                    "Mustang",
                    "Challenger"]

let carBrandList = ["Chevy",
                    "Ford",
                    "Dodge"]

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

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

在此示例中,由于Camaro由雪佛兰(Chevy)制成,因此匹配正确。

但是,我得到这个错误...

二进制运算符'=='不能应用于类型为'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”的值转换为预期的参数类型“字符串”

2 个答案:

答案 0 :(得分:1)

向您显示该消息是因为确实正在尝试传递图像,但是构造函数期望图像的名称为String。

如果您想这样称呼它:

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()!

确保避免强行展开。

此外,您的String数组和UIImage数组具有相同的名称,如果您想比较它们,请重命名它们。

答案 1 :(得分:0)

问题是您使用

let carModelList = ["Camaro",
                "Mustang",
                "Challenger"]

 let carBrandList = ["Chevy",
                "Ford",
                "Dodge"]

AND

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无法理解您使用的是哪一个