在 Swift 4.2 中,可以使用合成的 Equatable 和 Hashable 协议来避免编写冗长的代码。下面是一个示例:
struct Person: Equatable, Hashable {
var name: String
var age: Int
// 合成 Equatable 协议的实现
static func ==(lhs: Person, rhs: Person) -> Bool {
return lhs.name == rhs.name && lhs.age == rhs.age
}
// 合成 Hashable 协议的实现
func hash(into hasher: inout Hasher) {
hasher.combine(name)
hasher.combine(age)
}
}
let person1 = Person(name: "John", age: 30)
let person2 = Person(name: "John", age: 30)
if person1 == person2 {
print("两个人是相等的")
}
let set: Set = [person1, person2]
print(set.count) // 输出 1
在上面的示例中,我们定义了一个名为 Person 的结构体,它遵循了 Equatable 和 Hashable 协议。然后,我们使用合成的 Equatable 和 Hashable 协议实现,将比较和哈希计算的逻辑委托给结构体的属性。
这样,我们只需要在结构体中定义属性,并声明结构体遵循 Equatable 和 Hashable 协议,Swift 就会自动为我们生成 Equatable 和 Hashable 的实现代码。这样可以大大减少我们需要编写的冗长的代码量。