<div dir="ltr"><div>TL;DR: Force explicit protocol conformance of non-optional methods for child classes on an opt-in basis.<br></div><div><br></div><div>Currently, a child class that inherits their parent class&#39; 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. </div><div><br></div><div>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&#39;m trying to have added to Swift in this fairly long-winded post.</div><div><br></div><div>@abstract protocol P: class {</div><div>     // All methods defined in here would need to be explicitly overridden by the conforming class&#39;s children.</div><div>}</div><div><br></div><div>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.</div><div><div><br></div></div><div><div>@abstract @objc protocol P: class {</div><div>     // All non-optional methods defined in here would need to be explicitly overridden by the conforming class&#39;s children.</div><div>}</div></div><div><br></div><div>Thoughts?</div><br clear="all"><div><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div style="color:rgb(0,0,0);font-family:helvetica,arial"><span style="color:rgb(34,34,34);font-family:arial,sans-serif">Best,</span></div><div style="color:rgb(0,0,0);font-family:helvetica,arial"><span style="color:rgb(34,34,34);font-family:arial,sans-serif"><br></span></div><div style="color:rgb(0,0,0);font-family:helvetica,arial"><span style="color:rgb(34,34,34);font-family:arial,sans-serif">Arthur / <a href="http://sabintsev.com/" target="_blank">Sabintsev.com</a> </span></div></div></div></div></div></div>
</div>