> On Apr 13, 2016, at 9:34 AM, Kurt Werle via swift-evolution
> <[email protected]> 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
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution