Sent from my iPad
> On May 21, 2016, at 7:17 AM, Charlie Monroe <[email protected]> wrote: > > Yes, see below. I believe it should work as sketched below. Making the > extension default implementations final will prevent from extending the > delegate protocols by subclasses (and much more). > > IMHO the default dispatch for methods on protocol extensions should be > dynamic. This has been discussed extensively and is problematic for a number of reasons. > >> This thread isn't default implementations of protocol requirements. Those >> are dynamically dispatched. This thread is about *new* methods introduced >> in protocol extensions. These are not dynamically dispatched and exhibit >> different behavior depending on the static type due to the shadowing issue. >> >>> >>> You might argue that you mean just the methods declared only in the >>> protocol extension - I see those, however as something that may help >>> subclassing delegated instances. Example: >>> >>> You have a root class representing some kind of a view - it has a >>> `delegate` property. Then you decide to make a subclass and would like to >>> introduce your own delegate methods on top of those offered by the >>> superclass. >>> >>> You can subclass the protocol, but Swift won't let you override the >>> `delegate` property with a different type. So you can create a new property >>> `mySubclassDelegate`, which is horrid, but kinda works. >>> >>> The other option is to simply extend the original delegate protocol with >>> additional methods with default implementation, which you should be able to >>> override in your conforming class. >>> >>> In code example: >>> >>> protocol Delegate { >>> func myClassDidSomething(obj: MyClass) >>> } >>> >>> class MyClass { >>> weak var delegate: Delegate? >>> } >>> >>> extension Delegate { >>> func mySubclassDidSomethingElse(obj: MySubclass) { } >>> } >>> >>> class MySubclass: MyClass { } >>> >>> This is where I see how this can be very useful in many areas not having it >>> final. >>> >>> Charlie >>> >>>> Many moons ago, I was pushing to require a `final` keyword on protocol >>>> extension methods, which would prevent conforming types from providing >>>> their own implementations. It was probably the first thing I worked on. >>>> There were long arguments about whether and how you could override the >>>> `final`-ness, people kept clamoring for dynamic dispatch, and I ultimately >>>> wasn't able to produce a consensus before I had to turn my attention back >>>> towards paying work. >>>> >>>> -- >>>> Brent Royal-Gordon >>>> Architechies >>>> >>>> _______________________________________________ >>>> swift-evolution mailing list >>>> [email protected] >>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>> >>> _______________________________________________ >>> swift-evolution mailing list >>> [email protected] >>> https://lists.swift.org/mailman/listinfo/swift-evolution > _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
