Двоичный оператор '==' нельзя применить к двум операндам Equatable... что?
Вы можете видеть на изображении ниже, что я пытался расширить Collection
протокол, чтобы включить метод под названием removingDuplicates
, который должен делать именно то, что говорит. Ошибка, которую отображает компилятор, кажется, прямо противоречит определению Equatable
протокол. Это ошибка или я что-то недопонимаю?
2 ответа
==
функция (все операторы на самом деле функции в Swift) является требованием Equatable
протокол, что означает, что он должен использоваться с некоторыми конкретными реализациями протокола.
Другой аспект заключается в том, что Collection
является универсальным типом, и его Element
связанный тип должен быть в конечном счете также заполнен конкретным типом, и == Equatable
здесь не помогает
На самом деле, даже не возможно иметь коллекцию Equatable
значения, как Equatable
это протокол с Self
требования, таким образом, на него можно напрямую ссылаться во многих местах, например [Equatable]
Одной из причин этого является тот факт, что это объявление не может удовлетворить требование "коллекции являются однородными", поскольку вы не сможете таким образом поместить два совершенно не связанных типа в массив.
Что вам нужно сделать, это преобразовать равенство where
оговорка о соответствии: extension Collection where Element: Equatable
, Это перемещает бремя предоставления фактической реализации пользователю расширения. И позволяет использовать поддержку, принесенную Equatable
тип.