Hi
I have watched the WWDC talk 409 on optimizing performance. There is a considerable overhead in having dymanic methods that can be overridden. Using "final" methods is much more efficient. But of course if you are desiging a set of classes that need to override methods, that is part of the design.
I think it would be much better for Swift methods to be final by default, and to require a keyword if they are to be overridden. In general, a method is not meant to be overridden. In fact, leaving all methods available for overriding seems dangerous.
At least one other object-oriented language, Delphi, works this way: methods are final by default and must be marked virtual to be overridden. This seems eminiently sensible. Overriding methods seems best if it is designed in from the start, and safer. And that has performance benefits.
Regards
Mark