Equality between protocols

Drop this in playground and your on your way:

protocol IPositional:class{}
class A:IPositional{}
class B:IPositional{}
let a:IPositional = A()
let b:IPositional = B()
let c:IPositional = a
a === b //false
a === c //true


the :class after the protocol name means that you derive only classes for the protocol, so it cant be a protocol for structs for instance, this in turn enables === operator for the protocol.

It also means that you are able to set variables via extension.


  • Write an example of the use case for variables via extension.