[swift-evolution] What about a VBA style with Statement?
Erica Sadun
erica at ericasadun.com
Wed Apr 13 11:04:56 CDT 2016
> On Apr 13, 2016, at 9:34 AM, Kurt Werle via swift-evolution <swift-evolution at swift.org> wrote:
>
> I've always thought that the with construct is not a good idea. It seems to me that the moment you want to use with it indicates that you are getting too much into some other classes business; shouldn't that class deal with this? Why are you exposing/integrating so much of some other class's logic? Maybe there should be a method that does all this, or maybe a custom struct that passes all the appropriate information...
>
> Yeah, there are exceptions - always. But for the most part I'm not a fan.
>
> Kurt
The biggest advantage of the with pattern IMO is Cocoa initializers. It provides a more unified
initialization scope. Instead of:
let questionLabel = UILabel()
questionLabel.textAlignment = .Center
questionLabel.font = UIFont(name:"DnealianManuscript", size: 72)
questionLabel.text = currentQuestion.text
questionLabel.numberOfLines = 0
You get:
let questionLabel2 = with(UILabel()) {
$0.textAlignment = .Center
$0.font = UIFont(name:"DnealianManuscript", size: 72)
$0.text = currentQuestion.text
$0.numberOfLines = 0
}
You also have the option to customize a Value type before assigning it to a constant or to base
a new value constant on a copy of an existing value constant:
struct Foo { var (a, b, c) = ("a", "b", "c") }
var f = with(Foo()) { $0.a = "X" }
print(f) // Foo(a: "X", b: "b", c: "c")
I personally would love to see a Swift construct that created a scope with `self` defined so the
awkward `$0.` prefixes could be discarded.
-- E, who may have brought up this topic once or twice before on this list
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160413/eb7c7165/attachment.html>
More information about the swift-evolution
mailing list