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

Joe Groff jgroff at apple.com
Mon Dec 7 10:58:05 CST 2015

> 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)


More information about the swift-evolution mailing list