[swift-evolution] protocol can only be used as a generic constraint because it has Self or associated type requirements

Martin Kühl martin.kuehl at gmail.com
Mon Dec 14 09:26:16 CST 2015

On 14 December 2015 at 14:20, Marc Knaup via swift-evolution
<swift-evolution at swift.org> wrote:
> I find the suggestion from Paul Cantrell very useful where you can use all properties and methods of the protocol which do not depend on an associated type or Self.
> var array = [Hashable]()
> // …
> for element in array {
>     print(element.hashValue)
> }
> Who cares that it doesn't fulfill Equatable conformance yet?

Exactly. This would let us write a function like

    func hash(Hashable... values) -> Int {
        // calculate combined hashValue from all hashable values

analogous to Guava's Objects.hashCode to help implement hashValue in
custom structs.


More information about the swift-evolution mailing list