Swift Generic Type Уравниваемый сортировкой массива - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь согласовать мой общий CustomSet с Equatable, но я получаю следующую ошибку, когда пытаюсь отсортировать массив списка в функции Equatable:

Неоднозначная ссылка на члена '<' </p>

Мне кажется, проблема в том, что у компилятора нет информации о типах значений при сравнении в сортировке, но я не уверен, как сказать ему, что ему нужно. Это вообще возможно сделать на универсальных типах?

Цель состоит в том, чтобы сказать, что 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: <)
    }
}

1 Ответ

0 голосов
/ 08 января 2019

Вам нужно ограничить свой параметр общего типа значением Comparable, чтобы иметь возможность использовать оператор < для элементов list и, следовательно, сортировать list.

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