问题
I have the following code:
protocol LanguageType: Hashable {
var description: String { get }
}
extension LanguageType {
var description: String { return "(Self.self)" }
var hashValue: Int { return "(Self.self)".hashValue }
}
func ==<T: LanguageType, U: LanguageType>(left: T, right: U) -> Bool {
return left.hashValue == right.hashValue
}
struct English: LanguageType { }
When I do the following:
let english: LanguageType = English()
I get the following error:
Where is the associated type supposed to come from?
(Even if I remove the "\(Self.self)"
it still complains.)
回答1:
Equatable
has Self
as an associated type requirement and LanguageType
is indirectly derived from Equatable
, therefore LanguageType
has Self
as an associated type requirement.
来源:https://stackoverflow.com/questions/34693732/protocol-reported-as-having-self-or-associated-type-requirements-when-it-does