我有以下结构
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
}
仍然无条件。
答案 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)
}