Swift Equatable sur un protocole

Je ne pense pas que cela peut être fait, mais je vais la poser quand même. J'ai un protocole:

protocol X {}

Et une classe:

class Y:X {}

Dans le reste de mon code je me réfère à tout en utilisant le protocole X. Dans ce code, je voudrais être en mesure de faire quelque chose comme:

let a:X = ...
let b:X = ...
if a == b {...}

Le problème est que si j'essaie de mettre en œuvre Equatable:

protocol X: Equatable {}
func ==(lhs:X, hrs:X) -> Bool {
    if let l = lhs as? Y, let r = hrs as? Y {
        return l.something == r.something
    }
    return false
} 

L'idée de l'essayer et de permettre l'utilisation de == tout en cachant les implémentations derrière le protocole.

Swift n'aime pas cela, mais parce que Equatable a Self références et de ne plus me permettre de l'utiliser comme un type. Seulement comme un argument générique.

Si quelqu'un a trouvé un moyen pour appliquer un opérateur à un protocole sans le protocole de devenir inutilisable en tant que type?

InformationsquelleAutor drekka | 2017-02-09