It's sort of correct. :-/ The problem is that mutating methods implemented in protocol extensions are allowed to re-assign self, which is something that doesn't exactly make sense for a class: it will reassign the reference, but not change any other references. There's a whole family of issues that show that protocols with mutating methods produce surprising and potentially-bug-prone results with classes.
You can work around this by using a temporary var:
var mutableSelfHack = self
but you may want to reconsider whether it makes sense for a class to conform to a protocol with mutating methods at all.