This is definitively something very useful but it also introduces a strong 
asymmetry into Swift statements. In all control-flow statements, the condition 
is part of the outer scope. Or, to be more precise, its part of an intermediate 
scope between the outer and the inner scope (as you can declare variables in 
the condition which are invisible to the outer scope but visible to the inner 
scope). Your suggestion essentially moves the condition of repeat {} while () 
to the inner scope. I think that the more complex semantics is not worth the 
change. 

Here is how I deal with it btw:

process: do {

   let success = …


   guard success else { continue process }
}

Again, goto FTW :p

T.


> On 18 Jul 2016, at 19:52, Braeden Profile via swift-evolution 
> <[email protected]> wrote:
> 
> Good morning, Swift community!
> 
> I’ve come across a situation a number of times where I write code that has to 
> try something one or more times using a `repeat…while` loop and the condition 
> relies upon variables that should be declared within the scope of the loop.
> 
> repeat
> {
>       let success = doSomething()
> }
> while !success
> 
> The compiler unnecessarily prohibits this:  “Use of unresolved identifier 
> four.”  In this simple case, we can write:
> 
> repeat
> { }
> while !doSomething()
> 
> But in a more complex situation, we are forced to write:
> 
> var success: Bool
> repeat
> {
>       success = doSomething()
> }
> while !success
> 
> 
> We could change this so that the declarations within the top level scope of 
> the loop are accessible from the condition.
> 
> Thanks for reading my first post to the Swift discussion board!
> —Braeden
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to