[swift-evolution] [Pitch] Guarding on enum values

Brent Royal-Gordon brent at architechies.com
Wed Dec 23 03:15:24 CST 2015

>    guard case let .Succeed(m) = returnsResult() else {
>         return it
>    }
>    // Can safely use m, otherwise Result is passed back the call stack.

I didn't understand what you wanted to begin with, so to summarize: you want to be able to bind the return value of `returnsResult()` to a constant on the `else` branch if the pattern doesn't match.

I definitely see the use case here, but I can't say I like the implicit use of `it`. If we did something like this, I would prefer it be done by decorating the `else`:

	guard case let .Succeed(m) = returnsResult() else let r {
		return r

However, I'm honestly not sure that's much less burdensome than this:

	let r = returnsResult()
	guard case let .Succeed(m) = r else {
		return r

It *is* a line less, and a constant less, but it also means adding a new and slightly funky syntax to the language. I'm just not sure it's worth it.

Brent Royal-Gordon

More information about the swift-evolution mailing list