Двоичный оператор '==' нельзя применить к двум операндам Equatable... что?

Вы можете видеть на изображении ниже, что я пытался расширить Collection протокол, чтобы включить метод под названием removingDuplicates, который должен делать именно то, что говорит. Ошибка, которую отображает компилятор, кажется, прямо противоречит определению Equatable протокол. Это ошибка или я что-то недопонимаю?

введите описание изображения здесь

2 ответа

Решение

Замещать Element == Equatable с Element: Equatable,

== функция (все операторы на самом деле функции в Swift) является требованием Equatable протокол, что означает, что он должен использоваться с некоторыми конкретными реализациями протокола.

Другой аспект заключается в том, что Collection является универсальным типом, и его Element связанный тип должен быть в конечном счете также заполнен конкретным типом, и == Equatable здесь не помогает

На самом деле, даже не возможно иметь коллекцию Equatable значения, как Equatable это протокол с Self требования, таким образом, на него можно напрямую ссылаться во многих местах, например [Equatable]Одной из причин этого является тот факт, что это объявление не может удовлетворить требование "коллекции являются однородными", поскольку вы не сможете таким образом поместить два совершенно не связанных типа в массив.

Что вам нужно сделать, это преобразовать равенство where оговорка о соответствии: extension Collection where Element: Equatable, Это перемещает бремя предоставления фактической реализации пользователю расширения. И позволяет использовать поддержку, принесенную Equatable тип.

Другие вопросы по тегам