Я определил 2 протокола. Мне нужен первый (NameProtocol) для обеспечения соблюдения протокола Equatable. В то время как другой класс (BuilderProtocol) имеет метод, возвращающий первый (NameProtocol).
public protocol NameProtocol : Equatable {
var name: String { get }
}
public protocol BuilderProtocol {
func build() -> NameProtocol? // Compiler error
init()
}
Ошибка компилятора: «Протокол« NameProtocol »может использоваться только в качестве общего ограничения, поскольку он имеет требования типа Self или связанные с ним».
Мне нужен объект, возвращаемый функцией build (), чтобы вернуть объект, соответствующий NameProtocol и для которого я могу определить ==
Есть ли способ заставить эту работу работать?
Спасибо
При использовании псевдонима типа в BuilderProtocol, как я могу заставить работать объявление массива?
public protocol OtherRelatedProtocol {
var allNames : Array<NameProtocol> { get }
}
Заключение
Я удалю Equatable и реализую метод isEqual.
public protocol NameProtocol {
func isEqual(nameable: NameProtocol) -> Bool
var name: String { get }
}