[swift-users] Weird function call behaviour

Slava Pestov spestov at apple.com
Wed Feb 22 14:59:07 CST 2017


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 at 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 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/20170222/dc8a2631/attachment.html>


More information about the swift-users mailing list