> On Apr 13, 2016, at 9:34 AM, Kurt Werle via swift-evolution 
> <swift-evolution@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

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to