2016-05-06 9 views
6

sagen wir, ich folgende Voraussetzungen erfüllt sein:Vergleichen 2 Strukturen/Objekte implementieren das gleiche Protokoll?

let a = A() 
let b = B() 

let c = a == b 

I Fehler habe:

protocol P : Equatable { 
var uniqueID : Int { get } 
} 

struct A : P { 
var uniqueID = 1 
} 

struct B : P { 
var uniqueID = 2 
} 

func ==<T : P>(lhs:T , rhs:T) -> Bool { return lhs.uniqueID == rhs.uniqueID } 

Nun, wenn ich folgendes schreiben Binäroperators '==' kann nicht auf Operanden des Typs ‚A angewendet werden 'und' B '

Gibt es eine Möglichkeit, dies zu erreichen?

Antwort

10

müssen Sie die Gleichheit Funktion mit zwei generische Typen definieren verschiedene Arten zu ermöglichen, im Vergleich zu, wie folgt aus:

func ==<T: P, T2: P>(lhs: T , rhs: T2) -> Bool { return lhs.uniqueID == rhs.uniqueID } 
+0

toll es funktioniert :) –