[swift-evolution] Calling default implementation of protocols

Mateusz Zajac cojoj at icloud.com
Tue Dec 8 11:43:53 CST 2015


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")
    }
}

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


More information about the swift-evolution mailing list