[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