I find this approach (and the reasoning behind it) quite persuasive. I particularly like how it leverages subtle but pervasive patterns that all Swift users are already familiar with, whether they realise it or not - like using closures to represent imperative code inside non-imperative flows (e.g. filter.map.reduce etc).
It's bound to be confusing, on multiple levels.
break
(the existing statement) can be used anywhere in a series of statements, whereas in an expression context it would be nonsensical anywhere but as the last statement. So you'd have this context-specific difference in grammar. Not ideal.
(or, alternatively, you do allow it anywhere in the series of statements, in which case you've created the ability to have unreachable code inside an expression, which I think needlessly complicates the language)
break
already takes an argument, which is the label of the block to break from. It'll be ambiguous whether break foo
means break from the block labelled foo
or that the expression should evaluate to foo
(some variable, constant, type, etc). Also not a major problem, but not ideal. ("she'll be right" applied to this sort of thing is exactly how you end up with languages like C++)
Aside on the existing break <name>
: Some folks might dismiss the existing use of break
as esoteric and unimportant. Although it is true that it's not often utilised, I think that's more because it's unfamiliar to people from other programming languages, not because it's of little use. I find it incredibly useful and elegant when it is applicable, and you can pry it from my cold dead fingers. 
Also, admittedly, as a matter more or principle than practicality, break
is a non-linear control-flow statement, whereas in this case of expressions we're explicitly trying to avoid non-linear control flow. break
is a thinly-veiled abstraction on goto
, remember. (which is not bad; goto
is not inherently bad, just abused and misunderstood)