[swift-evolution] [Proposal] Make optional protocol methods first class citizens
devteam.codafi at gmail.com
Thu Mar 31 13:56:40 CDT 2016
To be fair, the "spirit of UIKit" that you mention comes from a time and language that encouraged OO and OO alone. Optional methods are, more often than not, backed by gigantic bit fields that keep track of whether or not the delegate actually conforms to the entirety of a protocol, which opens up a huge vector for bugs and complicates the internal logic of the control. I think Swift gives us a better opportunity to rethink the old approach not encourage it, don't you think?
For example, using a method returning an optional (or even better, a proper value) means you can give a proper semantics for what it means to not implement a particular method rather than "no selector here".
2016/03/31 14:49、Yuval Tal via swift-evolution <swift-evolution at swift.org> のメッセージ:
> None taken. However, most of the delegate concept of UIKit relies heavily on this "nonsensical" requirement. It is impossible for someone to implement a control in swift which is "in the spirit" of UIKit, meaning the control has a delegate, with several methods that share the same name with different parameters, some are required and some are optional. I think it is not fair to tell users that they cannot implement something that is such a common and repeating pattern in the core.
>> On Thu, Mar 31, 2016 at 2:23 PM, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
>> on Wed Mar 30 2016, Yuval Tal <swift-evolution at swift.org> wrote:
>> > Hi,
>> > I find that optional protocol methods to be very useful. However,
>> > there is a caveat -- it needs to be mapped to @objc. This puts a set
>> > of limitations, such as: structures cannot be used as parameters as it
>> > does not map to objective-c. What do you think about removing the
>> > requirement of using @objc and allow to create optional methods
>> > without these limitations?
>> 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.
>> swift-evolution mailing list
>> swift-evolution at swift.org
> swift-evolution mailing list
> swift-evolution at swift.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the swift-evolution