Что означает "Протокол... может использоваться только как общее ограничение, потому что он имеет" Я "или" связанные с ним требования типа "?
Обновление:. Для лучшего объяснения того, почему это так, проверить это видео.
Я пытаюсь создать словарь (на самом деле HashSet), введенный на основе пользовательского протокола в Swift, но он дает мне ошибку в название, и я не могу делать из него ни головы, ни хвосты.
protocol Observing: Hashable {
}
...
var observers = HashSet<Observing>()
Ответы
Ответ 1
Протокол Observing
наследует от протокола Hashable
, который, в свою очередь, наследует от протокола Equatable
. Протокол Equatable
имеет следующее требование:
func ==(lhs: Self, rhs: Self) -> Bool
И протокол, содержащий Self
где-то внутри него, не может использоваться нигде, кроме ограничения типа.
Здесь - аналогичный вопрос.
Ответ 2
Чтобы решить эту проблему, вы можете использовать дженерики. Рассмотрим этот пример:
class GenericClass<T: Observing> {
var observers = HashSet<T>()
}