Thanks for your detailed response. A lot of it makes sense, e.g. exception handling aspects.
Can you clarify what you see the benefit being? Perhaps it shows up in more complex cases, but in these simple examples I don't see why rebinding (a.k.a. shadowing) is beneficial.
Generally I see shadowing of self to be bad, based on my experience. Shadowing in general - outside of some well-understood, blessed cases, like if let self { … } - is bad because it creates ambiguities and the possibility of errors as a result.
A variation inspired by Python is (where Python would say with Point() as p: …):
let p = with Point() { p in
p.x = Int(xStr)!
p.y = Int(yStr)!
}
p is repeated in this example, but this with <object> { … } syntax can be used inlined in e.g. function arguments so there's no way to avoid either explicitly naming the argument to the closure or using the standard implicit name ($0).
Well, other than using self, but as noted I think that's more dangerous. And every time I see self used this way in these examples it makes the closure look a lot like an actual initialiser, which makes me wonder why the closure shouldn't be a proper initialiser (the ability to 'inline' the initialiser is not necessarily a good thing in my mind, as it can become… complicit in code duplication and poor factoring).
I know a little about move-only types, but perhaps not enough - can you elaborate on why it doesn't work well with them?
Indeed it is syntactically ambiguous. Though one could argue that the ambiguity is beneficial, as it lets a type override the default behaviour by providing its own init that takes a closure. e.g. if it wants to use result builder syntax instead. (one could also argue that giving type definers that option is a negative)
Is SwiftUI a relevant example? It uses a combination of initialisers, result builders, and what it calls "view modifiers" - as well as strong encouragement for abstraction into named View types - to do object configuration. If this do init … { syntax had been available at its conception, would the end design have actually been any different? I haven't thought long about it, but I don't immediately see any reason SwiftUI would be better with them.
Manual use of UIKit might be a better example? I don't use it myself, but I see a lot of chatter about that practice, within the Swift community.
And I continue to maintain that URLComponents is just badly designed. I can see that for complicated objects it might be considered unwieldy to have an initialiser that covers all their properties - and maybe that's an area where more compelling examples could be found - but URLComponents is not that complicated.
Yeah, this aspect is difficult because it's subjective and human languages vary so much. There might not be an objectively correct choice, just a "popular" one.
Maybe part of it is just that "with x, do y" is more natural to me than "do with x y". The latter is like some kind of reverse-Polish version of English. 
It's also like if every functional call had to be prefixed with "call" (or "do", even). e.g. let x = do computePi(). There are indeed other programming languages which have required that sort of syntax, but it seems unnecessary here (and a bit archaic). In particular, Swift uses parenthesis (or a trailing closure) to distinguish between calling an object and referencing the object. The parenthesis (or {) serve double-duty in this regard, in addition to being how function arguments are presented.
To date do has been used to distinguish a statement from a definition of a closure. In that sense it actually is kind of like an alternative to parenthesis (although, there might be important implementation differences between an immediately-called anonymous closure and a nested block, even beyond just the ability to tack catch on the end). I'm not sure what that tells us, just making the observation.
Agreed.
"modifying" vs "modified" technically works (as in "by modifying x…" vs "a modified copy of x…"), but is a subtle distinction that might confuse people, at least at first.