[swift-users] Comparing POP to OOP
Dave Abrahams
dabrahams at apple.com
Thu Feb 25 20:02:27 CST 2016
on Tue Feb 16 2016, Brent Royal-Gordon <swift-users-AT-swift.org> wrote:
>> We can override functionality provided from a protocol extension if
> we need specific functionality for a particular type.
>
> No you can't. Protocol extension methods (that is, methods declared
> only in an extension, as opposed to default implementations, which are
> both declared in the protocol and defined in an extension) are
> statically dispatched, so calling them on the protocol witness will
> always use the extension's implementation, even if some concrete type
> conforming to the protocol has a different implementation with the
> same name and signature.
>
> (I've worked on a proposal in the past that would require keywords to
> make this behavior clearer, but I've had trouble getting it through.)
>
> In any case, I'm pretty sure that's what Daniel means when he says
> extension methods are exactly equivalent to global functions. Sure,
> they appear after a dot, have an implicit self parameter, and are
> scoped to a particular type, but there's nothing dynamic about their
> behavior—they're not overridable in any useful sense.
The difference is that they can function as overrides of requirements,
which global functions cannot (insert obligatory caveat about operator
hack here).
--
-Dave
More information about the swift-users
mailing list