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

Dan Loewenherz dan at lionheartsw.com
Tue Nov 15 16:47:58 CST 2016


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161115/deeca505/attachment.html>


More information about the swift-users mailing list