[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