> 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