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

l8r
Sean

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to