首页 > 解决方案 > Swift Generic Type Equatable 通过对数组进行排序

问题描述

我正在尝试使我的泛型符合CustomSetEquatable 但当我尝试对 Equatable func 中的列表数组进行排序时出现以下错误:

对成员“<”的模糊引用

我认为问题在于编译器在比较排序时没有关于值类型的信息,但我不确定如何告诉它它需要什么。这甚至可以对泛型类型进行吗?

目标是说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: <)
    }
}

标签: swiftgenericsequality

解决方案


您需要将泛型类型参数限制Comparable为能够<在 of 的元素上使用运算符list,从而在 sort上使用运算符list

struct CustomSet<T : Comparable> {
    var list: [T]
    init(_ list: [T]){
        self.list = list
    }
}

推荐阅读