[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