我正在尝试使通用CustomSet
符合Equatable,但是当我尝试在Equatable函数中对列表数组进行排序时出现以下错误:
对成员'<'
的含糊引用
我认为问题在于,在进行排序比较时,编译器没有有关值类型的信息,但是我不确定如何告诉它需要什么。甚至可以对泛型类型做到这一点吗?
目标是如果CustomSet
包含完全相同的值,则list
是相等的。
struct CustomSet<T : Equatable> {
var list: [T]
init(_ list: [T]){
self.list = list
}
}
extension CustomSet : Equatable {
static func == (lhs: CustomSet, rhs: CustomSet) -> Bool {
return lhs.list.count == rhs.list.count && lhs.list.sorted(by: <) == rhs.list.sorted(by: <)
}
}
答案 0 :(得分:2)
您需要将通用类型参数限制为Comparable
,才能在<
的元素上使用list
运算符,从而对list
进行排序。
struct CustomSet<T : Comparable> {
var list: [T]
init(_ list: [T]){
self.list = list
}
}