2016-05-06 30 views
6

diciamo che ho il seguente:Confronta 2 strutture/oggetti implementano lo stesso protocollo?

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 } 

Ora, quando scrivo quanto segue:

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

let c = a == b 

mi sono errore: operatore binario '==' non può essere applicato a operandi di tipo 'A 'e' B '

c'è un modo per raggiungere questo obiettivo?

risposta

10

è necessario definire la funzione di uguaglianza con due tipi generici per consentire diverse tipologie per essere confrontati, in questo modo:

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

impressionante funziona :) –