SelectiveEquatable

SelectiveEquatable 是一个 Swift 库,它允许您通过指定要包含在比较中的属性来对对象和值实例执行相等性检查。只要属性符合 Equatable 协议,就可以在比较中包含任意属性组合。

使用方法

假设我们有以下 Person 结构体

struct Person: Identifiable {
   let firstName: String
   let lastName: String
   let age: Int
   let id: UUID
   let profileImage: UIImage
}

假设我们有一个 Person 的集合,并且我们想确定是否有任何人的 firstNamelastNameage 相同,但 idprofileImage 不同。我们可以使用 SelectiveEquatable 来执行此比较

extension Person: SelectiveEquatable {}
person1.isEqual(to: person2, by: \.firstName, \.lastName, \.age) // returns true or false

只需让我们的类型符合 SelectiveEquatable,我们现在就可以根据我们指定的属性选择性地比较 Person 的实例。在本例中,我们根据 person1person2firstNamelastNameage 来比较它们。

动机和设计

Swift 中的 Equatable 协议非常适合基于类型的所有属性来比较类型的实例。但是,有时我们只想基于属性的子集来比较实例。在某些情况下,对于某个类型来说,符合 Equatable 协议的成本是不实际的。SelectiveEquatable 的设计旨在解决这些问题。要了解更多关于 SelectiveEquatable 的动机和设计,请查看这些博客文章

安装

SelectiveEquatable 是一个非常简单的协议。为了使用它,您可以简单地将 SelectiveEquatable.swift 文件复制到您的项目中。

Swift Package Manager

您也可以使用 Swift Package Manager 来安装 SelectiveEquatable。将以下内容添加到您的 Package.swift 文件中

dependencies: [
    .package(url: "https://github.com/DandyLyons/SelectiveEquatable", from: "1.0.0")
]

许可

SelectiveEquatable 在 MIT 许可下可用。有关更多信息,请参见 LICENSE 文件。