[swift-users] Attempting to call default protocol implementation crashes Playground

zh ao owenzx at gmail.com
Tue Nov 15 19:27:59 CST 2016


'Default' implementation in protocol extension is used as fail safe. You should not consider it like something super class does. If you want it that way, use class inheritance instead.
Zhaoxin

Get Outlook for iOS

		_____________________________
From: Rick Mann via swift-users <swift-users at swift.org>
Sent: 星期三, 十一月 16, 2016 07:51
Subject: Re: [swift-users] Attempting to call default protocol implementation crashes Playground
To: Dan Loewenherz <dan at lionheartsw.com>
Cc: swift-users <swift-users at swift.org>


Well, this is a standard protocol default implementation. I was experimenting to see if it was possible to call the default implementation after providing a concrete implementation.

> On Nov 15, 2016, at 14:47 , Dan Loewenherz <dan at lionheartsw.com> wrote:
> 
> What are you trying to accomplish here, more concretely?
> 
> My first thought is that you shouldn't implement the same function in both a protocol extension and a conforming class. Why not just give them different names and call the function from within the extension instead of from the class? E.g.
> 
> protocol FooPro {
>     func _fooFunc()
> }
> 
> extension FooPro {
>     func fooFunc() {
>         print("fooFunc default")
>         _fooFunc()
>     }
> }
> 
> class FooClass: FooPro {
>     func _fooFunc() {
>         print("fooFunc FooClass")
>     }
> }
> 
> let fc = FooClass()
> fc.fooFunc()
> 
> Dan
> 
> On Tue, Nov 15, 2016 at 4:28 PM, Rick Mann via swift-users <swift-users at swift.org> wrote:
> The following gives Xcode 8.1 a very hard time. Eventually I get a Bad Access on the last line. I'm guessing it's a recursive call. Is there any way to call the default implementation from a "real" implementation?
> 
> protocol FooPro
> {
>         func fooFunc()
> }
> 
> extension FooPro
> {
>         func
>         fooFunc()
>         {
>                 print("fooFunc default")
>         }
> }
> 
> class FooClass : FooPro
> {
>         func
>         fooFunc()
>         {
>                 (self as FooPro).fooFunc()
>                 print("fooFunc FooClass")
>         }
> }
> 
> let fc: FooPro = FooClass()
> fc.fooFunc()
> 
> 
> Thanks!
> 
> 
> --
> Rick Mann
> rmann at latencyzero.com
> 
> 
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
> 


-- 
Rick Mann
rmann at latencyzero.com


_______________________________________________
swift-users mailing list
swift-users at swift.org
https://lists.swift.org/mailman/listinfo/swift-users



	
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161116/a53f40f7/attachment.html>


More information about the swift-users mailing list