So, this: http://nomothetis.svbtle.com/the-ghost-of-swift-bugs-future
Let me know if there's an existing thread about this, I searched the history but couldn't find any.
I understand more or less how this works, what I don't understand is why it has to work this way. Was this some kind of technical limitation or is it that this just makes more sense this way (even though it will be terribly confusing and will be a source of bugs and StackOverflow posts)?
The post says that:
> This time, the result, which is the same, might actually surprise the author of
callM2 very much. After all m2 is not defined in the original protocol A. So if they chose to call it, it must be because they expected the specific implementation of the extension.Why? If I call any method on any object, I expect it to choose the most specific version of that method available for the actual class of the object. If I override any method in my class, regardless where it came from, I expect this version of the method to always be called, because it might have some crucial information about this specific subclass. If I override e.g. viewDidLoad in my UIViewController subclass, it's essential that this specific overridden viewDidLoad will be called every time, and not any parent's implementation, because otherwise some of my object's properties would be uninitialized.
So what's so different about that m2 method that the author of callM2 expects it to always be called in the original version, even if I can write a better implementation of m2 that takes into account the details of my class?