[swift-evolution] Specify type of a delegate which conforms to a protocol

Brent Royal-Gordon brent at architechies.com
Wed Feb 10 07:00:02 CST 2016

> So, I definitely think there is room for improvement hereā€¦ how about recycling the inheritance syntax?
> let controller: (UIViewController, UITableViewDatasource)

This declares a tuple containing a UIViewController and a UITableViewDataSource.

> I added the braces because it would be really when you add the question mark for an optional value; an alternative for this case would be
> let controller: Optional<UIViewController, UITableViewDatasource>

This attempts to declare an optional with two generic types, which doesn't work because Optional only has one type parameter. (But other types, like Dictionary, *do* take two type parameters.)

Swift does already have a syntax for declaring that a type must conform to two (or more!) protocols:

	let controller: protocol<UITableViewDataSource, UITableViewDelegate>

I think this could probably be extended to support one class type as well, perhaps with a new name:

	let controller: all<UIViewController, UITableViewDataSource>

Brent Royal-Gordon

More information about the swift-evolution mailing list