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

Rick Mann rmann at latencyzero.com
Tue Nov 15 19:29:47 CST 2016


Okay. I coudln't find official documentation on this, and I don't currently need to do this, but wanted to fully understand it.

> On Nov 15, 2016, at 17:27 , zh ao <owenzx at gmail.com> wrote:
> 
> '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
> 
> 


-- 
Rick Mann
rmann at latencyzero.com




More information about the swift-users mailing list