1) Allow two Cacheables of the same type to be compare protocol Cacheable: Equatable { //....// func identifier() -> String } func ==<T : Cacheable>(lhs: T, rhs: T) -> Bool { return lhs.identifier() == rhs.identifier() } Pros This is the simplest solution. Cons You can only compare two Cacheable objects of the same type. This means that code below will fail and in order to fix it you need to make
![Swift Protocol Implements Equatable](https://cdn-ak-scissors.b.st-hatena.com/image/square/98d6f053a97a87156775f60757c60865d0f2c47d/height=288;version=1;width=512/https%3A%2F%2Fcdn.sstatic.net%2FSites%2Fstackoverflow%2FImg%2Fapple-touch-icon%402.png%3Fv%3D73d79a89bded)