And, as I know, it's not possible to call protocol's implementation in that case
> 16 нояб. 2016 г., в 4:29, Rick Mann via swift-users <swift-users@swift.org> > написал(а): > > 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 <owe...@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@swift.org> >> Sent: 星期三, 十一月 16, 2016 07:51 >> Subject: Re: [swift-users] Attempting to call default protocol >> implementation crashes Playground >> To: Dan Loewenherz <d...@lionheartsw.com> >> Cc: swift-users <swift-users@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 <d...@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@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 >>> rm...@latencyzero.com >>> >>> >>> _______________________________________________ >>> swift-users mailing list >>> swift-users@swift.org >>> https://lists.swift.org/mailman/listinfo/swift-users >>> >> >> >> -- >> Rick Mann >> rm...@latencyzero.com >> >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org >> https://lists.swift.org/mailman/listinfo/swift-users >> >> > > > -- > Rick Mann > rm...@latencyzero.com > > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users