class Person: Equatable {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
static func ==(lhs: Person, rhs: Person) -> Bool {
return (lhs.name == rhs.name) && (lhs.age == rhs.age)
}
}
let p1 = Person(name: "David", age: 29)
let p2 = Person (name: "John", age: 28)
var people = [Person]()
people.append(p1)
people.append(p2)
let p1index = people.index(of: p1)
let p2index = people.index(of: p2)
为了使用index(of:)
,我需要使 Person 符合 Equatable 协议。据我所知,Equatable 协议允许比较 2 个实例是否相等。查找索引和比较是否相等之间有什么关系?为什么我必须遵守 Equatable 协议才能使用index(of:)
?
要采用 Equatable 协议,我必须将(==)
运算符实现为静态方法:
static func ==(lhs: Person, rhs: Person) -> Bool {
return (lhs.name == rhs.name) && (lhs.age == rhs.age)
}
我没有在这里比较任何 Person 实例的相等性,为什么我还需要return (lhs.name == rhs.name) && (lhs.age == rhs.age)
?它是干什么用的?有什么关系index(of:)
吗?
抱歉问了这个愚蠢的问题。