<div>why?</div><div><br></div>I think it&#39;s just because subclass, protocol are different design patterns .<div><br></div><div>same question: </div><div>    why we need man toilet and women toilet?</div><div>    it&#39;s culture ,it&#39;s <span></span><span style="font-weight:700;background-color:rgba(255,255,255,0)"><font size="2">civilization</font></span></div><div><br><br>2016年7月22日星期五,Brandon Knope via swift-evolution &lt;<a href="javascript:_e(%7B%7D,&#39;cvml&#39;,&#39;swift-evolution@swift.org&#39;);" target="_blank">swift-evolution@swift.org</a>&gt; 写道:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I guess my question comes down to this:<br>
<br>
Is this a change for consistency OR is there actually a tangible benefit?<br>
<br>
If it&#39;s a protocol: you know some methods are being implemented.<br>
If it&#39;s a base class: it&#39;s possible that some methods are overridden<br>
<br>
Between knowing these two things, what does the distinction *actually* bring about?<br>
<br>
It&#39;s very possible I am not explaining myself properly.<br>
<br>
Another way: so now you know it is most definitely a base class and not a protocol, what does this information allow you to do differently?<br>
<br>
Basically, I am for introducing an &quot;implements&quot; or some new syntax for this distinction, but I just want to know if this change is just for consistency to separate inheritance and conformance OR if there is truly a benefit to knowing this distinction.<br>
<br>
I think this is important to convince people to make a change like this. I understand the idea behind it but the important question is: why?<br>
<br>
Thanks,<br>
Brandon<br>
<br>
&gt; On Jul 22, 2016, at 10:52 AM, Vladimir.S &lt;<a>svabox@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; I don&#39;t understand the question, really. I need to know because I need to know :-)<br>
&gt; I.e. I see new code, I&#39;m trying to understand the structure of the class, its dependency, if all the base code of this class is inside this class or there is some &#39;base&#39; code that is overriden, etc.. Class and Protocol two different entities with their specifics, so I need to know how the class is composed, if some methods without `override` keyword could be required by protocol..<br>
&gt; All the basic things you need to know about the new class you found in some code. No?<br>
&gt;<br>
&gt; Can I live with current syntax? Yes. Will change make a code more understandable for viewer in area of inheritance/conformance - Yes, especially if you need to review the code not in XCode/IDE but in some other viewer/web page. Should we make this change? I believe yes, but probably I&#39;m not right in my opinion, so we discussing it here.<br>
&gt;<br>
&gt;&gt; On 22.07.2016 17:32, Brandon Knope wrote:<br>
&gt;&gt; I understand.<br>
&gt;&gt;<br>
&gt;&gt; But why would you need to know if it&#39;s a class or a protocol to use the<br>
&gt;&gt; type? What understanding comes from knowing this information?<br>
&gt;&gt;<br>
&gt;&gt; I am honestly trying to understand the problem here and it feels like I&#39;m<br>
&gt;&gt; overlooking something.<br>
&gt;&gt;<br>
&gt;&gt; Brandon<br>
&gt;&gt;<br>
&gt;&gt; On Jul 22, 2016, at 10:12 AM, Charlie Monroe &lt;<a>charlie@charliemonroe.net</a><br>
&gt;&gt; &lt;mailto:<a>charlie@charliemonroe.net</a>&gt;&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Coming to someone elses code, it adds an extra effort to understand the<br>
&gt;&gt;&gt; declaration. Putting inheritance and conformance separately makes the<br>
&gt;&gt;&gt; declaration easier to read. At least for me.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Jul 22, 2016, at 4:05 PM, Brandon Knope &lt;<a>bknope@me.com</a><br>
&gt;&gt;&gt;&gt; &lt;mailto:<a>bknope@me.com</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Honest question: what is actually confusing about the current behavior?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I.E. What is important about knowing whether &quot;DataSource&quot; is a class or<br>
&gt;&gt;&gt;&gt; a protocol?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I thought the blurred distinction was intentional?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Brandon<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On Jul 22, 2016, at 9:47 AM, Charlie Monroe via swift-evolution<br>
&gt;&gt;&gt;&gt;&gt; &lt;<a>swift-evolution@swift.org</a> &lt;mailto:<a>swift-evolution@swift.org</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I agree that this is an issue. Mostly nowadays when more and more<br>
&gt;&gt;&gt;&gt;&gt; classes in Swift do not have a superclass - it simply looks weird:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; class MyClass: DataSource<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; One doesn&#39;t know whether &quot;DataSource&quot; is a class, protocol, etc.<br>
&gt;&gt;&gt;&gt;&gt; Nevertheless, I do not feel that :: is the answer. I really liked, how<br>
&gt;&gt;&gt;&gt;&gt; ObjC did it (which isn&#39;t possible with the generics now - is it?), but<br>
&gt;&gt;&gt;&gt;&gt; what about something like this?<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; class BaseClass [SomeDelegate, OtherDelegate, ProtocolX]<br>
&gt;&gt;&gt;&gt;&gt; class MyClass: BaseClass [SomeDelegate, OtherDelegate, ProtocolX]<br>
&gt;&gt;&gt;&gt;&gt; extension MyClass [OtherProtocol]<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; On Jul 22, 2016, at 3:14 PM, Vladimir.S via swift-evolution<br>
&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a>swift-evolution@swift.org</a> &lt;mailto:<a>swift-evolution@swift.org</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; I remember that this was discussed, but can&#39;t find any decision<br>
&gt;&gt;&gt;&gt;&gt;&gt; regarding this.. So, as a last chance, don&#39;t we want in Swift 3.0, as<br>
&gt;&gt;&gt;&gt;&gt;&gt; big source breaking change, separate class inheritance and protocol<br>
&gt;&gt;&gt;&gt;&gt;&gt; conformance in syntax?<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Sorry if there was a decision about this suggestions. Please let know<br>
&gt;&gt;&gt;&gt;&gt;&gt; in this case.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; I.e. when I see the following I can&#39;t understand if the class inherits<br>
&gt;&gt;&gt;&gt;&gt;&gt; from base class and conforms to protocols or just conforms to two<br>
&gt;&gt;&gt;&gt;&gt;&gt; protocols:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; class MyClass : First, Second, Third {<br>
&gt;&gt;&gt;&gt;&gt;&gt; }<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; We don&#39;t have a rule to name protocols with &#39;Protocol&#39;/other<br>
&gt;&gt;&gt;&gt;&gt;&gt; suffix/prefix, or classes with &#39;T&#39;/&#39;C&#39; prefix or something like this,<br>
&gt;&gt;&gt;&gt;&gt;&gt; so I believe to improve the clarity of code we should separate in<br>
&gt;&gt;&gt;&gt;&gt;&gt; syntax inheritance and conformance.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; As I understand we should discuss changes in these areas:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 1. class inheritance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: BaseClass<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 2. class conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 3. class inheritance + conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: BaseClass, SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 4. protocol conformance for structs:<br>
&gt;&gt;&gt;&gt;&gt;&gt; struct Struct: SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 5. protocol inheritance:<br>
&gt;&gt;&gt;&gt;&gt;&gt; protocol Child: BaseProtocol1, BaseProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; My suggestions:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; I) separate inheritance with double colon :<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 1. class inheritance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child:: BaseClass<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 2. class conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 3. class inheritance + conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child:: BaseClass : SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 4. protocol conformance for structs:<br>
&gt;&gt;&gt;&gt;&gt;&gt; struct Struct: SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 5. protocol inheritance:<br>
&gt;&gt;&gt;&gt;&gt;&gt; protocol Child:: BaseProtocol1, BaseProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; II) in class definition use parenthesis to separate inheritance and<br>
&gt;&gt;&gt;&gt;&gt;&gt; conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 1. class inheritance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: BaseClass<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 2. class conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: (SomeProtocol1, SomeProtocol2)<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 3. class inheritance + conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: BaseClass (SomeProtocol1, SomeProtocol2)<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 4. protocol conformance for structs:<br>
&gt;&gt;&gt;&gt;&gt;&gt; struct Struct: SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt; or<br>
&gt;&gt;&gt;&gt;&gt;&gt; struct Struct: (SomeProtocol1, SomeProtocol2)<br>
&gt;&gt;&gt;&gt;&gt;&gt; should be discussed<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 5. protocol inheritance:<br>
&gt;&gt;&gt;&gt;&gt;&gt; protocol Child: BaseProtocol1, BaseProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; III) special word like &#39;conforms&#39;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 1. class inheritance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: BaseClass<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 2. class conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: conforms SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt; or<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child conforms SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 3. class inheritance + conformance :<br>
&gt;&gt;&gt;&gt;&gt;&gt; class Child: BaseClass conforms SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 4. protocol conformance for structs:<br>
&gt;&gt;&gt;&gt;&gt;&gt; struct Struct: conforms SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt; or<br>
&gt;&gt;&gt;&gt;&gt;&gt; struct Struct conforms SomeProtocol1, SomeProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; 5. protocol inheritance:<br>
&gt;&gt;&gt;&gt;&gt;&gt; protocol Child: BaseProtocol1, BaseProtocol2<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Thoughts?<br>
&gt;&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a>swift-evolution@swift.org</a> &lt;mailto:<a>swift-evolution@swift.org</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt; swift-evolution mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a>swift-evolution@swift.org</a> &lt;mailto:<a>swift-evolution@swift.org</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
&gt;&gt;&gt;<br>
_______________________________________________<br>
swift-evolution mailing list<br>
<a>swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
</blockquote>
</div>