[swift-evolution] [Pitch] Adding in Optional Argument labels for completion handlers
Hooman Mehr
hooman at mac.com
Sun Oct 16 18:13:27 CDT 2016
This is an unfortunate side effect of another important and necessary change: Making argument labels part of functions name. This means that closures (which are anonymous functions and lack a function name) now don’t have any place to keep the argument labels.
Using a labeled tuple as a single argument block could act as a workaround for now, but:
I think we really need to find the correct way to add back argument labels for closures. I strongly suspect such a change will be ABI breaking.
People (including myself) are getting some experience with actual implications and feel of lack of argument labels for anonymous functions. As far as I can tell, nobody likes this and it feels so very un-Swifty and a big step backwards.
Lets find a way to add back argument labels to closures for Swift 4.
> On Oct 16, 2016, at 3:33 PM, Grant Kemp via swift-evolution <swift-evolution at swift.org> wrote:
>
> Hi all
> A South African in London here and I have decided to make the jump to trying to help Swift develop.
>
> I was an android and web developer and swift converted me to iOS programming which has become something that I love. I have built several apps on iOS and on macOS using it and thoroughly enjoyed it.
>
> One think has made me fall a little out of love with swift 3 was the removal of completion handler argument labels which has created:
> 1. Less maintainable code for teams
> 2. Less readable and thus more error prone code
> 3. Slower code to write as now I have to regularly scroll to the top of the method to find out what the parameters should be .
> 4. Seems to be at odds with other parts of the api which favours labels.
>
> I have found quite a lot of support from others via my stack overflow question here:
> http://stackoverflow.com/questions/39613272/xcode-8-function-types-cannot-have-argument-label-breaking-my-build <http://stackoverflow.com/questions/39613272/xcode-8-function-types-cannot-have-argument-label-breaking-my-build>
>
> Here is my suggestion:
> Currently the Swift 3 version does not allow arguments in the completionhandler method, which is confusing and not very readable.
> func myMethod(_ completionhandler:(_ downloadedValue:String,_ isActive:Bool, _ error:NSError)-> Void) {
> //<<After doing some async method such as downloading from an API >>
>
> completionhandler(myString, true, myError)
>
> }
> // INSTEAD: ideally the argument labels should be added optionally to be called in the completion method such as below and using a Tuple-like syntax to indicate that the method should have the labels
>
> func myMethod(_ completionhandler:( downloadedValue:String, isActive:Bool, error:NSError)-> Void) {
>
> //<<After doing some async method such as downloading from an API >>
>
> completionhandler(dowloadedValue:myString, isActive:true, error:myError)
>
> }
>
>
>
> Thanks for the help ( and any feedback on my idea above )
>
> Thanks for the epic work you are doing !
> --
> Sent from my mobile
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20161016/3f1aa136/attachment.html>
More information about the swift-evolution
mailing list