gpt4 book ai didi

swift - 索引(:) and Equatable Protocol

转载 作者:搜寻专家 更新时间:2023-11-01 07:11:48 25 4
gpt4 key购买 nike

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 协议(protocol)。据我所知,Equatable 协议(protocol)允许比较 2 个实例是否相等。查找索引和比较是否相等之间有什么关系?为什么我必须遵守 Equatable 协议(protocol)才能使用 index(of:)

要采用 Equatable 协议(protocol),我必须将 (==) 运算符实现为静态方法:

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:) 有什么关系吗?

很抱歉问了这个愚蠢的问题。

最佳答案

问问自己:index(of:) 到底做了什么?

它查找数组中指定元素的索引。正确的?换句话说,它找到第一个等于参数的元素的索引

index(of:) 的一个简单实现是遍历数组,并在每次迭代中检查元素是否等于参数。如果是,返回索引。如您所见,这涉及检查两个对象是否相等,因此需要 Equatable 协议(protocol)。

关于swift - 索引(:) and Equatable Protocol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44488173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com