[swift-evolution] Calling default implementation of protocols

Mateusz Zając cojoj at icloud.com
Tue Dec 8 22:59:43 CST 2015


I really love the workaround with another method used as a super method - looks really clean and easy to use compared to nested struct.

Mateusz

Dnia 09.12.2015 o godz. 00:58 Jordan Rose <jordan_rose at apple.com> napisał(a):

> 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/20151209/28afdfc3/attachment.html>


More information about the swift-evolution mailing list