SelectiveEquatable 是一个 Swift 库,它允许您通过指定要包含在比较中的属性来对对象和值实例执行相等性检查。只要属性符合 Equatable
协议,就可以在比较中包含任意属性组合。
假设我们有以下 Person
结构体
struct Person: Identifiable {
let firstName: String
let lastName: String
let age: Int
let id: UUID
let profileImage: UIImage
}
假设我们有一个 Person
的集合,并且我们想确定是否有任何人的 firstName
、lastName
和 age
相同,但 id
和 profileImage
不同。我们可以使用 SelectiveEquatable
来执行此比较
extension Person: SelectiveEquatable {}
person1.isEqual(to: person2, by: \.firstName, \.lastName, \.age) // returns true or false
只需让我们的类型符合 SelectiveEquatable
,我们现在就可以根据我们指定的属性选择性地比较 Person
的实例。在本例中,我们根据 person1
和 person2
的 firstName
、lastName
和 age
来比较它们。
Swift 中的 Equatable
协议非常适合基于类型的所有属性来比较类型的实例。但是,有时我们只想基于属性的子集来比较实例。在某些情况下,对于某个类型来说,符合 Equatable
协议的成本是不实际的。SelectiveEquatable
的设计旨在解决这些问题。要了解更多关于 SelectiveEquatable
的动机和设计,请查看这些博客文章
SelectiveEquatable
是一个非常简单的协议。为了使用它,您可以简单地将 SelectiveEquatable.swift
文件复制到您的项目中。
您也可以使用 Swift Package Manager 来安装 SelectiveEquatable
。将以下内容添加到您的 Package.swift
文件中
dependencies: [
.package(url: "https://github.com/DandyLyons/SelectiveEquatable", from: "1.0.0")
]
SelectiveEquatable
在 MIT 许可下可用。有关更多信息,请参见 LICENSE 文件。