> On May 16, 2017, at 12:32 PM, Nevin Brackett-Rozinsky via swift-users 
> <swift-users@swift.org> wrote:
> 
> There is not.
> 
> At some point in the future, I believe the plan is to eventually allow 
> default implementations to be written in-line within the protocol declaration 
> itself. In other words, the fact that default implementations currently must 
> appear in extensions, is a temporary limitation that has not yet been a 
> priority to address.
> 
> Once we gain the ability to define default implementations within protocols 
> themselves, rather than extensions, then your use-case will “just work” (at 
> least as long as you control the protocol anyway). I wouldn’t hold my breath 
> though, as that behavior will not appear this year, and the plans for next 
> year have not been hashed out yet.

Even that won’t completely solve the problem, though, because:

protocol P {
        func foo() {
                // default implementation
        }
}

struct S: P {
        func foo() {
                // overriden implementation
        }
}

If foo is refactored here, S will start getting the wrong implementation of it, 
silently, with no warning.

People have tried to bring up proposals to add some sort of “override”-like 
keyword for protocols on swift-evolution a bunch of times, but it always gets 
shouted down by certain members of the group, so we’re probably permanently 
stuck with this situation where a supposedly “protocol-oriented” language is 
not safe to use with protocols.

Charles

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to