[swift-evolution] Calling default implementation of protocols

Jordan Rose jordan_rose at apple.com
Tue Dec 8 17:58:10 CST 2015


I do think this would indeed be a feature worth having, but it would need design. There's also a simple workaround for now: put the default implementation in another method or a free function.

Jordan


> On Dec 8, 2015, at 9:43, Mateusz Zajac via swift-evolution <swift-evolution at swift.org> wrote:
> 
> If you define a simple protocol like:
> protocol Foo {
>     func testPrint()
> }
> And than you provide a default implementation for testPrint() method in protocol extensions like:
> extension Foo {
>     func testPrint() {
>         print("Protocol extension call")
>     }
> }
> You aren't allowed to call the fault implementation from the structure eg.
> struct Bar: Foo {
>     func testPrint() {
>         self.testPrint()
>         print("Call from struct")
>     }
> }
> This is some sort of limitation as often happens that a default implementation is providing a major part of implementation and only one, simple line is changed in actual struct implementation. If you're using classes you can achieve this by creating a base class and calling a method on super. If you consider structs, there's no such possibility and you always have to write a whole implementation from scratch in each structure which conforms to the protocol.
> You can use composition by creating nested structure, but it's neither logical nor clean... It's rather a hack...
> struct Bar: Foo {
>     func testPrint() {
>         // Calling default implementation
>         struct Dummy : Foo {}
>         let dummy = Dummy()
>         dummy.testPrint()
>         print("Call from struct")
>     }
> }
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151208/d6ab401d/attachment.html>


More information about the swift-evolution mailing list