将struct与UIImage进行比较

时间:2016-11-15 16:42:32

标签: ios swift struct uiimage

我有以下结构

struct Contact: Equatable {
    let name: String?
    let number: String
    let image: UIImage?
}

func ==(lhs: Contact, rhs: Contact) -> Bool {
    return lhs.name == rhs.name && lhs.number == rhs.number && lhs.image == rhs.image
}

我使用上面的函数来比较两个结构。但它无法比较图像。即使结构具有相同的图像,它也会失败。我在这里想念什么?

修改

根据Duncan的评论,我修改了功能

func ==(lhs: Contact, rhs: Contact) -> Bool {
    var imagesAreEqual = false
    if let lhsImage = lhs.image, let rhsImage = rhs.image {
        imagesAreEqual = lhsImage.isEqual(rhsImage)
    } else if lhs.image == nil && rhs.image == nil {
        imagesAreEqual = true
    }

    return lhs.name == rhs.name && lhs.number == rhs.number && imagesAreEqual
}

仍然无条件。

1 个答案:

答案 0 :(得分:1)

如果您查看Xcode中UIImage上的文档,他们会说:

  

isEqual(_ :)方法是唯一可靠的方法来确定是否   两个图像包含相同的图像数据。

     

您创建的图像对象可能彼此不同,甚至   使用相同的缓存图像数据初始化它们时。唯一的办法   确定它们的相等性是使用isEqual(_ :)方法,其中   比较实际的图像数据。

所以重写你的==函数以使用isEqual来比较图像:

func ==(lhs: Contact, rhs: Contact) -> Bool {
    return lhs.name == rhs.name && 
      lhs.number == rhs.number && 
      lhs.image.isEqual(rhs.image)
}