[swift-evolution] Extending declaration scope to condition for `repeat { } while ()`

Taras Zakharko taras.zakharko at uzh.ch
Mon Jul 18 21:43:44 CDT 2016


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 <swift-evolution at swift.org> 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
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160719/5a9ed3a9/attachment.html>


More information about the swift-evolution mailing list