> Le 14 avr. 2016 à 09:49, Vladimir.S via swift-evolution 
> <swift-evolution@swift.org> a écrit :
> 
> Agree, that we can already use some hacks(IMO) to have some kind of what we 
> need.
> Actually, we already discussed some variants : method "with" in extension to 
> type and global generic function "with". Each of them has disadvantages in 
> compare to "with" language construction. In your example you need to create 
> temp instance, need "return", calls the block() - many noise for simple 
> action.
> 
> Also, such workarounds not always protect us from problems(like modifying 
> constant struct instance in generic "with" method - it compiles. but raise 
> runtime error) and each of us needs to move these workarounds from project to 
> project, plus we use different implementation for the "with" feature, no 
> standard, in one project with many developers we'll find different variants 
> for the same "with" feature.
> 
> I believe we need such language construction in some or another 
> implementation.
> 
> I suggest these constructions:
> 
> // similar to "if let.. " and "guard let.."
> with let questionLabel = UILabel() {
>  //...
> }
> 
> with var some = SomeStruct() {
>  //...
> }
> 
> with questionLabel {
>  // ..
> }
> 
> And suggest to discuss these variants:
> 
> "one-point" (my preffered) :
> 
> with questionLabel {
>  .textAlignment = .Center
>  .font = UIFont(name:"DnealianManuscript", size: 72)
>  .text = "?"
>  .numberOfLines = 0
> }
> 
> "two points":
> 
> with questionLabel {
>  ..textAlignment = .Center
>  ..font = UIFont(name:"DnealianManuscript", size: 72)
>  ..text = "?"
>  ..numberOfLines = 0
> }
> 
> "$" sign :
> 
> with questionLabel {
>  $.textAlignment = .Center
>  $.font = UIFont(name:"DnealianManuscript", size: 72)
>  $.text = "?"
>  $.numberOfLines = 0
> }
> 
> "$0" (don't think this is good, as there can not be $1 etc):
> 
> with questionLabel {
>  $0.textAlignment = .Center
>  $0.font = UIFont(name:"DnealianManuscript", size: 72)
>  $0.text = "?"
>  $0.numberOfLines = 0
> }
> 

Thought with a free standing 'with' the next request to come in, could be to be 
able to do something like:

with source, destination {
  $1.something = $0.somethingSimilar
  $1.x = $0.bound.left
  $1.y = $0.point.top
}

So using $0,  may be a future proofing option.

Dany

> 
> On 14.04.2016 13:41, Milos Rankovic via swift-evolution wrote:
>>> On 13 Apr 2016, at 17:04, Erica Sadun via swift-evolution
>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>> 
>>> The biggest advantage of thewithpattern IMO is Cocoa initializers. It
>>> provides a more unified
>>> initialization scope. Instead of:
>>> 
>>> letquestionLabel =UILabel()
>>> questionLabel.textAlignment= .Center
>>> questionLabel.font= UIFont(name:"DnealianManuscript", size:72)
>>> questionLabel.text=currentQuestion.text
>>> questionLabel.numberOfLines=0
>> 
>> Whilst I would not mind the `with` pattern, it’s worth noting that Swift
>> already has some very fine alternatives:
>> 
>> letquestionLabel: UILabel= {
>> let$ = UILabel()
>> $.textAlignment= .Center
>> $.font= UIFont(name:"DnealianManuscript", size: 72)
>> $.text= "?"
>> $.numberOfLines= 0
>> return$
>> }()
>> 
>> 
>> Including some lazy options:
>> 
>> 
>> private(set)lazyvarquestionLabel: UILabel= {...}()
>> 
>> 
>> staticletquestionLabel: UILabel= {...}()
>> 
>> milos
>> 
>> 
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to