[swift-evolution] Proposal: Universal dynamic dispatch for method calls
Gwendal Roué
gwendal.roue at gmail.com
Wed Dec 9 13:01:01 CST 2015
> Le 9 déc. 2015 à 19:52, Kevin Ballard via swift-evolution <swift-evolution at swift.org> a écrit :
>
> b) methods defined in protocol extensions by definition can't be overridden already,
Methods defined in protocol extension actually can, sort of, be overridden, and this is very useful:
protocol P { }
extension P {
func f() { … }
}
struct S {
func f() {
...
(self as P).f()
…
}
}
I know only one use case for this technique, in the groue/GRDB.swift SQLite wrapper:
In this library, a DatabasePersistable protocol provides basic CRUD operations, and a Record class adopts this protocol and "overrides" with the technique above the protocol methods with extra features provided by the class (especially change tracking).
The benefits of this architecture are:
- You can subclass use the full-featured Record base class, and get CRUD + change tracking for free.
- The Record subclasses can override the CRUD methods, and add custom code (validation, for example).
- You can have a custom struct adopt DatabasePersistable, and get CRUD for free.
- The custom structs that can also "override" the CRUD methods, and add custom code (validation, for example).
This is, in my opinion, a very valid use case for this "overriding".
Gwendal Roué
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151209/e08b471f/attachment.html>
More information about the swift-evolution
mailing list