[swift-evolution] Proposal: Bitmask-style syntax for Method Chaining

Chuquimia, Max max at chuquimianproductions.com
Tue Dec 15 15:48:28 CST 2015


Greetings, fellow Swiftlets!

I am very interested to hear what you guys think about method chaining in a
similar style to Swift’s bitmask handling.
Yes, there’s a healthy discussion on “Setup Closures”, but let’s
dispatch_async to start a new (albeit parallel) thread regarding a neat way
to access properties.
No doubt you’ve found yourself writing something similar to the following:

someViewController.view.layer.shadowColor = UIColor.grayColor().CGColor
someViewController.view.layer.shadowRadius = 5.0
someViewController.view.layer.shadowOffset = CGSizeMake(0.0, 0.5)
someViewController.view.layer.shadowOpacity = 0.75

It can be disturbing to see someViewController.view.layer repeated so many
times, however we are currently unable to refactor these lines without
subclassing and possibly affecting other areas of implementation.

What I propose is a natural way of assigning properties on layer with a
syntax we are all already used to:

someViewController.view.layer = [
    .shadowColor = UIColor.grayColor().CGColor,
    .shadowRadius = 5.0,
    .shadowOffset = CGSizeMake(0.0, 0.5),
    .shadowOpacity = 0.75
]

Which is of course similar to our belovèd
someViewController.view.autoresizingMask
= [.FlexibleWidth, .FlexibleHeight]

Of course, this is an extreme example of keypath length, however I believe
this language feature would still be beneficial for shorter keypaths (think
accessing self within closures or the recent proposal to reinstate self.)

Using [] instead of {} eliminates the risk of ambiguity if a method
such as func
layer(c: Void -> Void) has been defined in the view’s class. Apart from
that, I can’t think of any possible conflicts, and as it’s an addition
there will be no migration required when moving to a new language version

Interested in your thoughts,

MaxC
​
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20151216/b92c1f4b/attachment.html>


More information about the swift-evolution mailing list