[swift-evolution] Proposal: Change of syntax for class protocols

Douglas Gregor dgregor at apple.com
Mon Dec 7 16:04:29 CST 2015


> On Dec 7, 2015, at 8:58 AM, Joe Groff via swift-evolution <swift-evolution at swift.org> wrote:
> 
>> 
>> On Dec 7, 2015, at 8:00 AM, Matthew Cheok via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> Currently, we declare class protocols with the following syntax:
>> 
>> protocol TestProtocol: class, OtherProtocol {}
>> 
>> This is odd for a few reasons:
>> 1) The keyword class exists in the middle of the declaration
>> 2) The keyword class follows the colon and looks a lot like inheritance
>> 3) The keyword class occupies a somewhat arbitrary first position after the colon (otherwise we have an error)
>> 
>> We also have another use of the class keyword as a modifier when declaring class methods:
>> 
>> class func doSomething() {}
>> 
>> I’m suggesting a change of syntax that rectifies the above issues:
>> 
>> class protocol TestProtocol: OtherProtocol {}
>> 
>> Would love to hear other thoughts on this.
> 
> The constraint syntax is used because, in the fullness of time, it should also be applicable to type parameters and associated types:
> 
> protocol Foo { typealias T: class }
> 
> func foo<T: class>(x: T)


Right. This is exactly the reason why we have the syntax

	protocol X : class { … }

and why I’m against changing the current syntax.

	- Doug

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151207/6f351b03/attachment.html>


More information about the swift-evolution mailing list