I asked a similar question here: Why covariance does not apply when working with protocols in some situations
I believe the answer is that in the current compiler implementation, when dealing with protocols, Liskov substitution principle is not fully supported in some circumstances. Some deeper reasons are also explained in that thread by other guys.