[swift-evolution] [Proposal] Make optional protocol methods first class citizens

Sean Heber sean at fifthace.com
Thu Mar 31 13:52:30 CDT 2016

> Caveat: this is going to be strongly-worded; sorry in advance.  I think
> (no offense intended) it's a terrible idea.  The whole notion of an
> “optional requirement” is nonsensical to begin with, and the use of
> optional protocol requirements encourages a style of programming that
> lifts the responsibility of the protocol designer for careful design at
> the expense of clients of the protocol.  There are better ways to do
> things; let's not propagate this anti-pattern any further than it's
> already gone.

This is why my suggestion to solve this required the protocol to include default values for any optional function with a return value - I don’t think that a function should be optional as in “no presence” or even in a way that the caller can identify if the function is or isn’t defined, but just optional as in “it has a clear documented default.” I don’t agree that the caller of an optional protocol function should be able to tell if the function is present or not - the protocol itself should be defined as if all functions are there, but the “optional-ness” is then no worse than default values on function parameters - but that might just be me.

Perhaps a better term for my way of thinking about it would be “default” rather than optional:

protocol UIGestureRecognizerDelegate {
 default func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool = true
 // etc


More information about the swift-evolution mailing list