[swift-evolution] [Pitch] separate syntax of class inheritance and protocol conformance

Charlie Monroe charlie at charliemonroe.net
Fri Jul 22 09:12:40 CDT 2016


Coming to someone elses code, it adds an extra effort to understand the declaration. Putting inheritance and conformance separately makes the declaration easier to read. At least for me.

> On Jul 22, 2016, at 4:05 PM, Brandon Knope <bknope at me.com> wrote:
> 
> Honest question: what is actually confusing about the current behavior?
> 
> I.E. What is important about knowing whether "DataSource" is a class or a protocol?
> 
> I thought the blurred distinction was intentional?
> 
> Brandon 
> 
>> On Jul 22, 2016, at 9:47 AM, Charlie Monroe via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> I agree that this is an issue. Mostly nowadays when more and more classes in Swift do not have a superclass - it simply looks weird:
>> 
>> class MyClass: DataSource
>> 
>> One doesn't know whether "DataSource" is a class, protocol, etc. Nevertheless, I do not feel that :: is the answer. I really liked, how ObjC did it (which isn't possible with the generics now - is it?), but what about something like this?
>> 
>> class BaseClass [SomeDelegate, OtherDelegate, ProtocolX]
>> class MyClass: BaseClass [SomeDelegate, OtherDelegate, ProtocolX]
>> extension MyClass [OtherProtocol]
>> 
>> 
>>> On Jul 22, 2016, at 3:14 PM, Vladimir.S via swift-evolution <swift-evolution at swift.org> wrote:
>>> 
>>> I remember that this was discussed, but can't find any decision regarding this.. So, as a last chance, don't we want in Swift 3.0, as big source breaking change, separate class inheritance and protocol conformance in syntax?
>>> 
>>> Sorry if there was a decision about this suggestions. Please let know in this case.
>>> 
>>> I.e. when I see the following I can't understand if the class inherits from base class and conforms to protocols or just conforms to two protocols:
>>> 
>>> class MyClass : First, Second, Third {
>>> }
>>> 
>>> We don't have a rule to name protocols with 'Protocol'/other suffix/prefix, or classes with 'T'/'C' prefix or something like this, so I believe to improve the clarity of code we should separate in syntax inheritance and conformance.
>>> 
>>> As I understand we should discuss changes in these areas:
>>> 
>>> 1. class inheritance :
>>> class Child: BaseClass
>>> 
>>> 2. class conformance :
>>> class Child: SomeProtocol1, SomeProtocol2
>>> 
>>> 3. class inheritance + conformance :
>>> class Child: BaseClass, SomeProtocol1, SomeProtocol2
>>> 
>>> 4. protocol conformance for structs:
>>> struct Struct: SomeProtocol1, SomeProtocol2
>>> 
>>> 5. protocol inheritance:
>>> protocol Child: BaseProtocol1, BaseProtocol2
>>> 
>>> 
>>> My suggestions:
>>> 
>>> I) separate inheritance with double colon :
>>> 
>>> 1. class inheritance :
>>> class Child:: BaseClass
>>> 
>>> 2. class conformance :
>>> class Child: SomeProtocol1, SomeProtocol2
>>> 
>>> 3. class inheritance + conformance :
>>> class Child:: BaseClass : SomeProtocol1, SomeProtocol2
>>> 
>>> 4. protocol conformance for structs:
>>> struct Struct: SomeProtocol1, SomeProtocol2
>>> 
>>> 5. protocol inheritance:
>>> protocol Child:: BaseProtocol1, BaseProtocol2
>>> 
>>> 
>>> II) in class definition use parenthesis to separate inheritance and conformance :
>>> 
>>> 1. class inheritance :
>>> class Child: BaseClass
>>> 
>>> 2. class conformance :
>>> class Child: (SomeProtocol1, SomeProtocol2)
>>> 
>>> 3. class inheritance + conformance :
>>> class Child: BaseClass (SomeProtocol1, SomeProtocol2)
>>> 
>>> 4. protocol conformance for structs:
>>> struct Struct: SomeProtocol1, SomeProtocol2
>>> or
>>> struct Struct: (SomeProtocol1, SomeProtocol2)
>>> should be discussed
>>> 
>>> 5. protocol inheritance:
>>> protocol Child: BaseProtocol1, BaseProtocol2
>>> 
>>> 
>>> III) special word like 'conforms'
>>> 
>>> 1. class inheritance :
>>> class Child: BaseClass
>>> 
>>> 2. class conformance :
>>> class Child: conforms SomeProtocol1, SomeProtocol2
>>> or
>>> class Child conforms SomeProtocol1, SomeProtocol2
>>> 
>>> 3. class inheritance + conformance :
>>> class Child: BaseClass conforms SomeProtocol1, SomeProtocol2
>>> 
>>> 4. protocol conformance for structs:
>>> struct Struct: conforms SomeProtocol1, SomeProtocol2
>>> or
>>> struct Struct conforms SomeProtocol1, SomeProtocol2
>>> 
>>> 5. protocol inheritance:
>>> protocol Child: BaseProtocol1, BaseProtocol2
>>> 
>>> 
>>> Thoughts?
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list