<div dir="ltr">That would be great, thanks for the heads up!<div class="gmail_extra"><br><div class="gmail_quote">2016-02-20 23:22 GMT+00:00 Joe Groff <span dir="ltr">&lt;<a href="mailto:jgroff@apple.com" target="_blank">jgroff@apple.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
&gt; On Feb 20, 2016, at 4:41 AM, Diego Sánchez via swift-users &lt;<a href="mailto:swift-users@swift.org">swift-users@swift.org</a>&gt; wrote:<br>
&gt;<br>
&gt; Consider the following code<br>
&gt;<br>
&gt; protocol MyProtocol {<br>
&gt;     func doSomething()<br>
&gt; }<br>
&gt;<br>
&gt; extension MyProtocol {<br>
&gt;     func doSomething() {<br>
&gt;         print(&quot;default impl&quot;)<br>
&gt;     }<br>
&gt; }<br>
&gt;<br>
&gt; class A: MyProtocol {}<br>
&gt;<br>
&gt; class B: A {<br>
&gt;     func doSomething() {<br>
&gt;         print(&quot;B impl&quot;)<br>
&gt;     }<br>
&gt; }<br>
&gt;<br>
&gt; let a: MyProtocol = A()<br>
&gt; a.doSomething() // Prints &quot;default impl&quot;<br>
&gt; let b: MyProtocol = B()<br>
&gt; b.doSomething() // Prints &quot;default impl&quot; instead of &quot;B impl&quot;!<br>
&gt;<br>
&gt; Now let&#39;s override doSomething in A...<br>
&gt;<br>
&gt; class A: MyProtocol {<br>
&gt;     func doSomething() {<br>
&gt;         print(&quot;A impl&quot;)<br>
&gt;     }<br>
&gt; }<br>
&gt;<br>
&gt; class B: A {<br>
&gt;      override func doSomething() {<br>
&gt;         print(&quot;B impl&quot;)<br>
&gt;     }<br>
&gt; }<br>
&gt;<br>
&gt; let a: MyProtocol = A()<br>
&gt; a.doSomething() // Now it prints &quot;A impl&quot;<br>
&gt; let b: MyProtocol = B()<br>
&gt; b.doSomething() // Now it prints &quot;B impl&quot;<br>
&gt;<br>
&gt; That&#39;s clearly inconsistent. I would expect to print &quot;B impl&quot; in the first case; or maybe always &quot;default impl&quot; (I highly prefer the first option)<br>
<br>
</div></div>If you don&#39;t say &#39;override&#39;, you&#39;re not overriding anything, but defining a logically independent method. In the first example, `doSomething` isn&#39;t really a member of `A`, so it&#39;s not overrideable by subclasses, and the declaration of `B.doSomething` just shadows the protocol extension implementation instead of overriding it. This is admittedly weird, so we do have some proposals floating to improve things by implicitly mirroring protocol methods as class methods when a class conforms to a protocol.<br>
<span class="HOEnZb"><font color="#888888"><br>
-Joe</font></span></blockquote></div><br></div></div>