考虑这个结构:
struct Person : Comparable {
let name: String
let age: Int
}
extension Person {
static func < (lhs: Person, rhs: Person) -> Bool {
return lhs.name < rhs.name
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.age == rhs.age && lhs.name == rhs.name
}
}
Person
结构现在按名称排序。
但是,如果我希望能够按 name
中的任何一个进行排序怎么办?或 age
, 有没有办法制作 <
功能通用?
最佳答案
您不能使协议(protocol)通用。有两种方法可以解决您的问题:
您可以创建一个包装器结构,它只包含一个 Person 值,但按不同的属性组合排序。
或者,您可以想出一种方法来编写比较两个事物的方法。我们在 Swift Talk 剧集中做到了这一点:https://talk.objc.io/episodes/S01E19-from-runtime-programming-to-functions (如果你不想看视频,你可以看文字记录)。
关于swift - Comparable 协议(protocol)可以通用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44742063/