[swift-evolution] Explicit Protocol Conformance for Child Classes

Arthur Ariel Sabintsev arthur at sabintsev.com
Sat Dec 12 11:14:18 CST 2015


TL;DR: Force explicit protocol conformance of non-optional methods for
child classes on an opt-in basis.

Currently, a child class that inherits their parent class' protocol
conformations are not explicitly required to override their parent classes
implementation of a protocol. For example, a custom class,
MyTableViewController, does not explicitly have to override the
non-optional methods of the protocols (i.e., UITableViewDataSource,
UITableViewDelegate) to which UITableViewController conforms.

For many protocols, the superclass implementation of a protocol method may
be enough. Therefore, this feature should off by default, and only enabled
if the creator of the protocol requires it (for whatever reason). I suggest
using a new `@abstract` attribute  to designate if a protocol requires
explicit conformance for children of a conforming parent class. This choice
of naming for the attribute is along the lines of what other languages call
an Abstract Class, which is what I'm trying to have added to Swift in this
fairly long-winded post.

@abstract protocol P: class {
     // All methods defined in here would need to be explicitly overridden
by the conforming class's children.
}

If you want to have optional methods in your protocol, then using the
@abstract attribute gets kind of messy, as you also have the @objc
attribute.

@abstract @objc protocol P: class {
     // All non-optional methods defined in here would need to be
explicitly overridden by the conforming class's children.
}

Thoughts?

Best,

Arthur / Sabintsev.com <http://sabintsev.com/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151212/6b839707/attachment.html>


More information about the swift-evolution mailing list