Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift UIImage等于_Swift_Uiimage - Fatal编程技术网

Swift UIImage等于

Swift UIImage等于,swift,uiimage,Swift,Uiimage,我需要检查加载到UIImage对象文件中的文件是否等于另一个图像,如果是,则执行一些操作。不幸的是,它不起作用 emptyImage = UIImage(named: imageName) if(image1.image != emptyImage) { // do something } else { // do something } 上述代码始终输入if分支。您不能使用来比较两个UIImage对象=或=运算符,一个选项是使用UIImagePNGRepresentatio

我需要检查加载到
UIImage
对象文件中的文件是否等于另一个图像,如果是,则执行一些操作。不幸的是,它不起作用

emptyImage = UIImage(named: imageName)

if(image1.image != emptyImage) {
    // do something
} else {
    // do something
}

上述代码始终输入
if
分支。

您不能使用
来比较两个
UIImage
对象=
=
运算符,一个选项是使用
UIImagePNGRepresentation
将其转换为
NSData
对象,如以下代码中所示:

func areEqualImages(img1: UIImage, img2: UIImage) -> Bool {

   guard let data1 = UIImagePNGRepresentation(img1) else { return false }
   guard let data2 = UIImagePNGRepresentation(img2) else { return false }

   return data1.isEqualToData(data2)
}

我希望这对您有所帮助。

您可以将
UIImage
实例转换为
NSData
实例并进行比较

if let emptyImage = UIImage(named: "empty") {
    let emptyData = UIImagePNGRepresentation(emptyImage)
    let compareImageData = UIImagePNGRepresentation(image1.image)

    if let empty = emptyData, compareTo = compareImageData {
        if empty.isEqualToData(compareTo) {
            // Empty image is the same as image1.image
        } else {
            // Empty image is not equal to image1.image
        }
    } else {
        // Creating NSData from Images failed
    }
}

您甚至可以在
UIImage
上实现相等运算符,这将在比较图像时简化您的逻辑:

func==(lhs:UIImage,rhs:UIImage)->Bool{
lhs.pngData()==rhs.pngData()
}

这也会启用
=UIImage

上的code>操作符应该输入if语句。它不应该进入else语句。请参阅下面我的答案。您应该使用
.isEqual
,而不是
=
如果有人在查看Swift 3:
isEqualToData
不再存在,您可以直接在2个
数据
对象之间使用
=
运算符,就像其他两个相同类型的变量一样。我只是想指出,我对这个答案投了反对票,因为Cristik的方法在声明两个lhsData对象时完全错了,而其中一个对象应该命名为rhsData(我知道应该命名为rhsData,因为他/她后来引用了它)。@Will这是一个复制+粘贴的打字错误,谢谢你提出来,我用正确的var名称更新了答案。对于swift 4,将UIImagePNGRepresentation(img1)替换为data1=image.pngData或data1=image.jpegData(压缩质量:0.7),我不知道为什么会发生这种情况,也不确定我是否完全正确,但如果两个图像都是空图像(例如初始化为无数据),则返回否。即使将同一个实例与自身进行比较,也不会得到任何结果