When a class conforms to a protocol and a requirement is fulfilled by a method in an extension, the class does not get a vtable entry for the extension method. So it cannot be overridden in a subclass — there’s nothing to dynamically dispatch here. We plan on addressing this as part of ABI stability.
Slava > On Feb 22, 2017, at 9:39 AM, David Hart via swift-users > <swift-users@swift.org> wrote: > > In the following piece of code, can somebody explain the last result? Why the > break in consistency? Is this a bug? > > protocol P { > func foo() -> String > } > > extension P { > func foo() -> String { return "P" } > } > > class A : P { > func foo() -> String { return "A" } > } > > class B : P {} > class C : B { > func foo() -> String { return "C" } > } > > A().foo() // A > (A() as P).foo() // A > B().foo() // P > (B() as P).foo() // P > C().foo() // C > (C() as P).foo() // P > _______________________________________________ > 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