I feels like this might be part of the reason.
Reassigning self in class may mean 2 things:
- Change only the reference calling the function
- Change all references referring to the class
Which ever we choose is gonna cause confusion to the other half (not to mention complexity to do the latter).
Reassigning self in protocol doesn’t seem to have as many interpretation.