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 <[email protected]> > написал(а): > > 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 <[email protected]> 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 <[email protected]> >> Sent: 星期三, 十一月 16, 2016 07:51 >> Subject: Re: [swift-users] Attempting to call default protocol >> implementation crashes Playground >> To: Dan Loewenherz <[email protected]> >> Cc: swift-users <[email protected]> >> >> >> 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 <[email protected]> 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 >>> <[email protected]> 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 >>> [email protected] >>> >>> >>> _______________________________________________ >>> swift-users mailing list >>> [email protected] >>> https://lists.swift.org/mailman/listinfo/swift-users >>> >> >> >> -- >> Rick Mann >> [email protected] >> >> >> _______________________________________________ >> swift-users mailing list >> [email protected] >> https://lists.swift.org/mailman/listinfo/swift-users >> >> > > > -- > Rick Mann > [email protected] > > > _______________________________________________ > swift-users mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-users _______________________________________________ swift-users mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-users
