[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